C# 将JSON反序列化为对象
我有一些建议:C# 将JSON反序列化为对象,c#,json,json.net,C#,Json,Json.net,我有一些建议: { "foo" : [ { "bar" : "baz" }, { "bar" : "qux" } ] } 我想将其反序列化为一个集合。我定义了这个类: public class Foo { public string bar { get; set; } } 但是,以下代码不起作用: JsonConvert.DeserializeObject<List<Foo>>(jsonString); J
{
"foo" : [
{ "bar" : "baz" },
{ "bar" : "qux" }
]
}
我想将其反序列化为一个集合。我定义了这个类:
public class Foo
{
public string bar { get; set; }
}
但是,以下代码不起作用:
JsonConvert.DeserializeObject<List<Foo>>(jsonString);
JsonConvert.DeserializeObject(jsonString);
如何反序列化我的JSON?JSON不是
Foo
JSON数组。代码JsonConvert.DeserializeObject(jsonString)
将从根上解析JSON字符串,您的类型T
必须与该JSON结构完全匹配。解析器不会猜测哪个JSON成员应该代表您要查找的列表
您需要一个根对象,它表示来自根元素的JSON
您可以很容易地从一个示例JSON生成用于执行此操作的类。要执行此操作,请复制JSON并在Visual Studio中单击Edit->Paste Special->Paste JSON As class
或者,您也可以在上执行相同的操作,从而生成或多或少相同的类
您将看到集合实际上比预期的要深一个元素:
public class Foo
{
public string bar { get; set; }
}
public class RootObject
{
public List<Foo> foo { get; set; }
}
并访问收藏:
foreach (var foo in rootObject.foo)
{
// foo is a `Foo`
}
您始终可以按照大小写约定重命名属性,并对其应用JsonProperty
属性:
public class Foo
{
[JsonProperty("bar")]
public string Bar { get; set; }
}
还要确保JSON包含足够的样本数据。类解析器必须根据JSON中的内容猜测适当的C类型 这是一个关于“为什么反序列化不起作用”的规范性问题,旨在展示人们可以遵循的一般工作流程。请随意回答、改进并用作重复目标。谢谢@CodeCaster。虽然我在VS2010和VS2017中都找不到粘贴特殊选项,但提供的链接完成了这项工作。哇!但愿我早知道这个网站。非常感谢。
public class Foo
{
[JsonProperty("bar")]
public string Bar { get; set; }
}