0

我正在编写代码来测试json从. 返回的响应格式如下:asmxC#

{"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);
 }

如您所见,我正在对字符串进行大量手动格式化,以便最终可以对其进行解析。

然后我循环并JObjectJArray将其添加到列表之前将每个对象转换为所需的对象类型。

这确实给了我想要的结果,但我觉得必须有一个更优雅的解决方案。

有人可以帮忙吗?

PS - 为了简洁起见,我留下了很多代码。如果需要,我可以提供更多细节。

4

1 回答 1

0

Thanks to Brian Rogers and Tanim Salem (see comments above)

I did change the web service so that it not double serialized.

I can now simplify the code to something like this:

    private static JArray ConvertToJsonArray(string json)
    {          
        var jsonObject = JObject.Parse(json);                
        return (JArray)jsonObject["d"];
    }

And then convert it to my list of objects using:

    private static IList<ThirdPartyClaim> ConvertJsonArrayToListOfClaims(JArray jsonArray)
    {
        return JsonConvert.DeserializeObject<List<ThirdPartyClaim>>(jsonArray.ToString());           
    }

Any other comments or improvements would be appreciated.

于 2013-06-28T11:17:07.413 回答