我从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:
答案 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