Данные JSON, возвращаемые службой WCF, содержат escape-символы
У меня есть работающее приложение WCF - WPF, но я ищу некоторую оптимизацию. Ниже приведен мой код, в котором служба отдыха WCF представляет массив JSON, а пользовательский интерфейс WPF получает его без проблем.
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 в измененном коде содержит escape-символы (\
), которая, кажется, вызывает ошибку при десериализации.