当前位置:  开发笔记 > 编程语言 > 正文

将JSON反序列化为对象

如何解决《将JSON反序列化为对象》经验,为你挑选了1个好方法。

我有一些JSON:

{
    "foo" : [ 
        { "bar" : "baz" },
        { "bar" : "qux" }
    ]
}

我想将其反序列化为一个集合.我已经定义了这个类:

public class Foo
{
    public string bar { get; set; }
}

但是,以下代码不起作用:

 JsonConvert.DeserializeObject>(jsonString);

如何反序列化我的JSON?



1> CodeCaster..:

那个JSON不是FooJSON数组.代码JsonConvert.DeserializeObject(jsonString)将从根向上解析JSON字符串,并且您的类型T必须与该JSON结构完全匹配.解析器不会猜测哪个 JSON成员应该代表List您正在寻找的.

您需要一个根对象,它表示根元素中的JSON.

您可以轻松地让类通过示例JSON生成.为此,请复制JSON并单击Edit -> Paste Special -> Paste JSON As ClassesVisual Studio.

或者,你可以在http://json2csharp.com上做同样的事情,它会生成或多或少相同的类.

您会看到该集合实际上是一个比预期更深的元素:

public class Foo
{
    public string bar { get; set; }
}

public class RootObject
{
    public List foo { 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#类型.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有