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