我正在编写代码来测试从json
中的asmx
网络服务返回的C#
。返回的响应采用以下格式:
{"d":"[{\"Id\":\"row1\",\"TheDate\":\"01/01/2013 00:00:00\",\"Description\":\"Test1\",\"Field\":\"N\"},
{\"Id\":\"row2\",\"TheDate\":\"01/01/2013 00:00:00\",\"Description\":\"Test2\",\"Field\":\"N\"}]
最终,我想将数据转换为对象列表。我被限制使用JSON.Net
。
目前我正在使用以下方法将回复中返回的json
转换为JArray
:
private static JArray ConvertToJsonArray(StreamReader reader)
{
var json = reader.ReadToEnd();
string result = json.Replace("{\"d\":\"", string.Empty);
result = result.Replace(@"\", string.Empty);
result = result.Replace("]\"}", "]");
return JArray.Parse(result);
}
正如您所看到的,我正在对字符串进行大量手动格式化,以便最终解析它。
然后我循环并将JObject
中的每个JArray
转换为所需的对象类型,然后再将其添加到列表中。
这确实给了我想要的结果,但我觉得必须有一个更优雅的解决方案。
有人可以帮忙吗?
PS - 为了简洁,我留下了很多代码。如果需要,我可以提供更多细节。
答案 0 :(得分:0)
感谢Brian Rogers
和Tanim Salem
(请参阅上面的评论)
我确实更改了网络服务,因此不会进行双重序列化。
我现在可以将代码简化为:
private static JArray ConvertToJsonArray(string json)
{
var jsonObject = JObject.Parse(json);
return (JArray)jsonObject["d"];
}
然后使用以下命令将其转换为我的对象列表:
private static IList<ThirdPartyClaim> ConvertJsonArrayToListOfClaims(JArray jsonArray)
{
return JsonConvert.DeserializeObject<List<ThirdPartyClaim>>(jsonArray.ToString());
}
任何其他意见或改进将不胜感激。