繁体   English   中英

Newtonsoft JSON 反序列化

[英]Newtonsoft JSON Deserialize

我的 JSON 如下:

{"t":"1339886","a":true,"data":[],"Type":[['Ants','Biz','Tro']]}

我找到了 C# 的 Newtonsoft JSON.NET 反序列化库。 我尝试使用它如下:

object JsonDe = JsonConvert.DeserializeObject(Json); 

如何访问JsonDe对象以获取所有“类型”数据? 我用循环尝试过,但它不起作用,因为该对象没有枚举器。

您可以实现一个类来保存您在 JSON 中的字段

class MyData
{
    public string t;
    public bool a;
    public object[] data;
    public string[][] type;
}

然后使用 DeserializeObject 的通用版本:

MyData tmp = JsonConvert.DeserializeObject<MyData>(json);
foreach (string typeStr in tmp.type[0])
{
    // Do something with typeStr
}

文档: 序列化和反序列化 JSON

一个更简单的解决方案:使用动态类型

从 Json.NET 4.0 Release 1 开始,有原生动态支持。 您不需要声明一个类,只需使用dynamic

dynamic jsonDe = JsonConvert.DeserializeObject(json);

所有字段都将可用:

foreach (string typeStr in jsonDe.Type[0])
{
    // Do something with typeStr
} 

string t = jsonDe.t;
bool a = jsonDe.a;
object[] data = jsonDe.data;
string[][] type = jsonDe.Type;

使用动态,您不需要创建一个特定的类来保存您的数据。

根据Newtonsoft 文档,您还可以反序列化为这样的匿名对象:

var definition = new { Name = "" };

string json1 = @"{'Name':'James'}";
var customer1 = JsonConvert.DeserializeAnonymousType(json1, definition);

Console.WriteLine(customer1.Name);
// James
//Your snippet
object JsonDe = JsonConvert.DeserializeObject(Json);

//what you need to do
JObject JsonDe = JsonConvert.DeserializeObject<JObject>(Json);

现在您拥有合适的属性和方法来处理数据。

您还可以使用 Dictionary<string,object> 而不是 JObject。 但是,还有其他选择,尽管是强类型。

NewtonSoft.Json 是一个优秀的库。 我已经将它用于许多用例。

json 的美妙之处在于可以动态创建模式。 因此我们需要能够编写通用代码来处理它们

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM