【发布时间】:2014-01-03 14:37:43
【问题描述】:
我有一个工作的 WCF - WPF 应用程序工作,但是我正在寻找一些优化。 下面是我的代码,其中 WCF RESTful 服务公开了一个 JSON 数组,而 WPF UI 正在接收它而没有任何问题。
WCF:
public clsStatus[] GetAllStatus()
{
DataTable dt = new DataTable();
List<clsStatus> lstGetAllStatus = new List<clsStatus>();
try
{
dt = // My Data Table
foreach (DataRow dr in dt.Rows)
{
dcStatus objGetAllStatus = new clsStatus();
objGetAllStatus.Id = Convert.ToInt32(dr["Id"]);
objGetAllStatus.Status = dr["Status"].ToString();
lstGetAllStatus.Add(objGetAllStatus);
}
}
return lstGetAllStatus.ToArray();
}
在 WPF 用户界面中:
public ObservableCollection<T> InvokeGet<T>(string sUrl)
{
System.Net.WebRequest request = System.Net.HttpWebRequest.Create(sUrl);
request.Method = "GET";
request.UseDefaultCredentials = true;
request.ContentLength = 0;
System.Net.HttpWebResponse response = request.GetResponse() as System.Net.HttpWebResponse;
Stream objResponseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(objResponseStream);
string objResponseString = reader.ReadToEnd();
response.Close();
JavaScriptSerializer objJsonserialiser = new JavaScriptSerializer();
objJsonserialiser.MaxJsonLength = 999999999;
T[] arrResult = objJsonserialiser.Deserialize<T[]>(objResponseString);
return new ObservableCollection<T>(arrResult);
}
这种方式序列化/反序列化工作正常,而当我进行下面显示的更改时,反序列化不再起作用:
在 WCF 中:
public string[] GetAllStatus()
{
DataTable dt = new DataTable();
try
{
dt = // My Data Table
string jsonresp = JsonConvert.SerializeObject(dt, Formatting.None);
}
return jsonresp;
}
在 WPF 中:
public ObservableCollection<T> InvokeGet<T>(string sUrl )
{
System.Net.WebRequest request = System.Net.HttpWebRequest.Create(sUrl);
request.Method = "GET";
request.UseDefaultCredentials = true;
request.ContentLength = 0;
System.Net.HttpWebResponse response = request.GetResponse() as System.Net.HttpWebResponse;
Stream objResponseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(objResponseStream);
string objResponseString = reader.ReadToEnd();
response.Close();
dsReportRequests dsrepreq = new dsReportRequests();
//This conversion is failing with error
dsrepreq = JsonConvert.DeserializeObject<dsReportRequests>(objResponseString);
}
错误:"Error converting value \"[{\"Id\":11280,\"statName}]\" to type 'clsStat[]'. Path '', line 1, position 759."
我发现更改后的代码中的 JSON 格式包含转义字符 (\),这似乎是在反序列化时导致错误。
【问题讨论】:
-
dsReportRequests是否实现了集合接口(例如ICollection、IList)? -
@franssu:没有。它不是。 dsReportRequests 仅包含 getter setter 属性。
标签: c# .net wpf json.net wcf-rest