在C#中,我如何反序化这个json?

时间:2016-02-12 18:40:27

标签: c# json serialization restsharp

我从REST服务中获取此JSON数据,如下所示:

[ [ [ {"Name": "Joe", "Comment": "Load", "Updated": null, "Test": ""} ] ] ]

[ [ [ {"Name": "Joe", "Comment": "Load", "Updated": null, "Test": ""}, {"Name": "Bill", "Comment": "123", "Updated": null, "Test": ""} ] ] ]

我在visual studio中做了一个“将JSON作为类复制”功能,它创建了这个:

 public class Rootobject
 {
     public Project[][][] Property1 { get; set; }
 }

 public class Project
 {
   public string Name { get; set; }
   public string Comment { get; set; }
   public string Updated { get; set; }
   public string Test { get; set; }
 }

但是当我尝试使用此代码反序列化时:

 var results = new JsonDeserializer().Deserialize<Rootobject>(response);

我收到错误声明:

RestSharp.dll中出现“System.InvalidCastException”类型的异常,但未在用户代码中处理 附加信息:无法将'RestSharp.JsonArray'类型的对象强制转换为'System.Collections.Generic.IDictionary`2 [System.String,System.Object]'

你能否告诉我可能做错了什么(注意:我无法控制数据的来源,因此不能选择改变格式)

另外,要确认这似乎是来自JSONLlint的有效JSON:

enter image description here

2 个答案:

答案 0 :(得分:2)

使用Newtonsoft.Json nuget包, 试试

JSONConvert.DeserialiseObject<Rootobject>(response)

编辑:顺便说一下,我试图在http://json2csharp.com/上使用你的json,它说解析你的JSON不起作用。请确保它有效。所以我怀疑任何json解析库都能解析你的JSON。

然而,当外部服务返回无效的JSON

时,实现自己的反序列化器是可能的,也是理想的解决方案

如果您向我展示服务返回多个Project对象时获得的JSON,我可以帮助您反序列化它。

EDIT2:Szabolcs的解决方案似乎很有希望,但我仍然建议使用JSON为多个Product对象进行测试。我闻到了一些不好的东西。它是一个糟糕的第三方服务。总是很好测试。

答案 1 :(得分:1)

您可以使用Json.NET反序列化这样的特定JSON:

method()

从嵌套列表中获取所有var json = "[ [ [ {\"Name\": \"Joe\", \"Comment\": \"Load\", \"Updated\": null, \"Test\": \"\"}, "+ " {\"Name\": \"Bill\", \"Comment\": \"123\", \"Updated\": null, \"Test\": \"\"} ] ] ]"; var deserializedObject = JsonConvert.DeserializeObject<List<List<List<Project>>>>(json);

Project