我有一些JSON:
{ "foo" : [ { "bar" : "baz" }, { "bar" : "qux" } ] }
我想将其反序列化为一个集合.我已经定义了这个类:
public class Foo { public string bar { get; set; } }
但是,以下代码不起作用:
JsonConvert.DeserializeObject>(jsonString);
如何反序列化我的JSON?
那个JSON不是Foo
JSON数组.代码JsonConvert.DeserializeObject
将从根向上解析JSON字符串,并且您的类型T
必须与该JSON结构完全匹配.解析器不会猜测哪个 JSON成员应该代表List
您正在寻找的.
您需要一个根对象,它表示根元素中的JSON.
您可以轻松地让类通过示例JSON生成.为此,请复制JSON并单击Edit -> Paste Special -> Paste JSON As Classes
Visual Studio.
或者,你可以在http://json2csharp.com上做同样的事情,它会生成或多或少相同的类.
您会看到该集合实际上是一个比预期更深的元素:
public class Foo { public string bar { get; set; } } public class RootObject { public Listfoo { get; set; } }
现在,您可以从根目录反序列化JSON(并确保重命名RootObject
为有用的东西):
var rootObject = JsonConvert.DeserializeObject(jsonString);
并访问该集合:
foreach (var foo in rootObject.foo) { // foo is a `Foo` }
您始终可以重命名属性以遵循约束约定并将JsonProperty
属性应用于它们:
public class Foo { [JsonProperty("bar")] public string Bar { get; set; } }
还要确保JSON包含足够的样本数据.类解析器必须根据JSON中找到的内容猜测适当的C#类型.