[英]Convert JSON Response Returning From Resful Web Service
我的RESTFUL Web服务和Web应用程序中有这两个类
public class Service
{
public int ID { get; set; }
public int HCode { get; set; }
public int HUserID { get; set; }
public string PatientNID { get; set; }
public List<Document> DocumentList { get; set; }
public int ServiceTypeID { get; set; }
public string TestName { get; set; }
public string Comment { get; set; }
public DateTime Date { get; set; }
}
public class Document
{
public int ID { get; set; }
public int ServiceID { get; set; }
public string FileName { get; set; }
public string Extension { get; set; }
public byte[] ByteDocument { get; set; }
}
这是功能接收对象并在Web服务中发送回List
public List<Serivce> GetServiceByHUserID(Service service)
{
SqlCommand cmd = new SqlCommand(
"SELECT *"
+ " FROM TransactionHistory"
+ " WHERE UserID = @HUserUserIDParam"
, con);
cmd.Parameters.Add(
"@HUserUserIDParam", SqlDbType.NVarChar).Value = service.HUserID;
return GetServiceResponse(cmd);
}
private List<Service> GetServiceResponse(SqlCommand cmd)
{
List<Service> serviceList = new List<Service>();
try
{
// Filling Data
....
}
return serviceList;
}
catch (Exception e) { return null; }
finally { con.Close(); }
}
这是Web应用程序中的功能发送对象和接收列表
private List<Service> GetServiceListResponse(HttpWebRequest request
, Service service)
{
try
{
var json = new JavaScriptSerializer().Serialize(service);
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = json.Length;
StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(),
System.Text.Encoding.ASCII);
requestWriter.Write(json);
requestWriter.Close();
WebResponse webResponse = request.GetResponse();
Stream webStream = webResponse.GetResponseStream();
StreamReader responseReader = new StreamReader(webStream);
string response = responseReader.ReadToEnd();
JavaScriptSerializer serializer = new JavaScriptSerializer();
// ERROR HERE
dynamic item = serializer.Deserialize<List<Service>>(response);
// ERROR HERE
responseReader.Close();
return item;
}
catch (Exception e) { return null; }
}
当我尝试将List <.Service>作为JSON对象返回并反序列化时,出现该错误
这是例外
无法将类型为“ System.String”的对象转换为类型为“ System.Byte []”
我找到了解决方案
这只是在更改我在序列化和反序列化中使用的类(在.NET中的内置类JavaScriptSerializer中 )
从JavaScriptSerializer ()到JsonConvert
在Github上发布: https : //github.com/JamesNK/Newtonsoft.Json/releases
NuGut上的最新软件包: Install-Package Newtonsoft.Json
Newtonsoft网站: http : //www.newtonsoft.com/json
引用dll或下载软件包后,请在代码内(.cs类内)引用dll:
using Newtonsoft.Json;
其他参考:
using System.IO;
using System.Text;
在发送和使用UTF8编码之前序列化json对象:
string json = JsonConvert.SerializeObject(service);
request.Method = "POST";
request.Method = "POSt";
request.ContentType = "application/json";
request.ContentLength = Encoding.UTF8.GetByteCount(json);
StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), new UTF8Encoding(false));
requestWriter.Write(json);
requestWriter.Close();
返回响应后反序列化json对象:
List<Service> serviceList = JsonConvert.DeserializeObject<List<Service>>(response);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.