c# 反序列化c# - Newtonsoft JSON反序列化





反序列化json c#提取json (4)


您可以实现一个包含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如下:

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

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

object JsonDe = JsonConvert.DeserializeObject(Json); 

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




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

var definition = new { Name = "" };

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

Console.WriteLine(customer1.Name);
// James



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

从Json.NET 4.0 Release 1开始,就有本机dynamic支持。 你不需要声明一个类,只需使用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;

使用dynamic您无需创建特定的类来保存数据。




您可以使用C# dynamic类型来简化操作。 这种技术也使得重构更简单,因为它不依赖魔术字符串。

JSON

下面的JSON字符串是来自HTTP API调用的简单响应,它定义了两个属性: IdName

{"Id": 1, "Name": "biofractal"}

C#

使用JsonConvert.DeserializeObject<dynamic>()将该字符串反序列化为一个动态类型,然后以通常的方式访问它的属性。

dynamic results = JsonConvert.DeserializeObject<dynamic>(json);
var id = results.Id;
var name= results.Name;

如果您将results变量的类型指定为dynamic ,而不是使用var关键字,那么属性值将正确反序列化,例如, Idint而不是JValue (感谢下面评论的GFoley83)。

注意 :Newtonsoft程序集的NuGet链接是http://nuget.org/packages/newtonsoft.json





c# json.net deserialization