将ASMX服务返回的JSON转换为C#对象列表

本文关键字:对象 列表 转换 JSON ASMX 服务 返回 | 更新日期: 2023-09-27 18:20:19

我正在编写代码来测试C#中从asmx web服务返回的json。返回的响应格式如下:

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

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

然后循环使用JArray中的每个JObject,并在将其添加到列表之前转换为所需的对象类型。

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

有人能帮忙吗?

附言-为了简洁起见,我省略了很多代码。如果需要,我可以提供更多细节。

将ASMX服务返回的JSON转换为C#对象列表

感谢Brian RogersTanim Salem(请参阅上面的评论)

我确实更改了web服务,使其不会重复序列化。

我现在可以将代码简化为这样的代码:

    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());           
    }

任何其他意见或改进都将不胜感激。