NET流行高性能JSON框架-Json.NET

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NET流行高性能JSON框架-Json.NET相关的知识,希望对你有一定的参考价值。

在日常编程中经常会使用到Json来进行数据的交互好在.Net平台下有很多开源的Json库使得我们能够比较轻松快速的处理各种复杂的Json,其中Newtonsoft库

是NET的流行高性能JSON框架

特性


工具

VS2010+

Newtonsoft库

从NuGet下载合适的Newtonsoft.Json库

1.在你需要引用Newtosoft.Json的项目上,点击鼠标右键,管理Nuget程序包即可打开项目包管理器。

2.在包管理器中输入关键字"Json"看到Newtosoft.Json这个库 点击右下加的箭头即可完成安装。


示例

1、序列化JSON-序列化和反序列化JSON,序列化程序设置和序列化属性

public class Account
{
    public string Email { get; set; }
    public bool Active { get; set; }
    public DateTime CreatedDate { get; set; }
    public IList<string> Roles { get; set; }
}
Account account = new Account
{
    Email = "james@example.com",
    Active = true,
    CreatedDate = new DateTime(2013, 1, 20, 0, 0, 0, DateTimeKind.Utc),
    Roles = new List<string>
    {
        "User",
        "Admin"
    }
};


string json = JsonConvert.SerializeObject(account, Formatting.Indented);
// {
//   "Email": "james@example.com",
//   "Active": true,
//   "CreatedDate": "2013-01-20T00:00:00Z",
//   "Roles": [
//     "User",
//     "Admin"
//   ]
// }


Console.WriteLine(json);

2、LINQ to JSON-解析,查询,修改和编写JSON

JArray array = new JArray();
array.Add("Manual text");
array.Add(new DateTime(2000, 5, 23));


JObject o = new JObject();
o["MyArray"] = array;


string json = o.ToString();
// {
//   "MyArray": [
//     "Manual text",
//     "2000-05-23T00:00:00"
//   ]
// }

3、JSON模式-加载模式并验证JSON。请注意,JSON Schema验证已移至其自己的程序包。有关 更多详细信息,请参见https://www.newtonsoft.com/jsonschema。

JObject o = JObject.Parse(@"{
  'Stores': [
    'Lambton Quay',
    'Willis Street'
  ],
  'Manufacturers': [
    {
      'Name': 'Acme Co',
      'Products': [
        {
          'Name': 'Anvil',
          'Price': 50
        }
      ]
    },
    {
      'Name': 'Contoso',
      'Products': [
        {
          'Name': 'Elbow Grease',
          'Price': 99.95
        },
        {
          'Name': 'Headlight Fluid',
          'Price': 4
        }
      ]
    }
  ]
}");


string name = (string)o.SelectToken("Manufacturers[0].Name");


Console.WriteLine(name);
// Acme Co


decimal productPrice = (decimal)o.SelectToken("Manufacturers[0].Products[0].Price");


Console.WriteLine(productPrice);
// 50


string productName = (string)o.SelectToken("Manufacturers[1].Products[0].Name");


Console.WriteLine(productName);
// Elbow Grease

4、转换XML-将JSON转换为XML和XML转换为JSON

string json = @"{
  '@Id': 1,
  'Email': 'james@example.com',
  'Active': true,
  'CreatedDate': '2013-01-20T00:00:00Z',
  'Roles': [
    'User',
    'Admin'
  ],
  'Team': {
    '@Id': 2,
    'Name': 'Software Developers',
    'Description': 'Creators of fine software products and services.'
  }
}";


XNode node = JsonConvert.DeserializeXNode(json, "Root");


Console.WriteLine(node.ToString());
// <Root Id="1">
//   <Email>james@example.com</Email>
//   <Active>true</Active>
//   <CreatedDate>2013-01-20T00:00:00Z</CreatedDate>
//   <Roles>User</Roles>
//   <Roles>Admin</Roles>
//   <Team Id="2">
//     <Name>Software Developers</Name>
//     <Description>Creators of fine software products and services.</Description>
//   </Team>
// </Root>

5、BSON-序列化和反序列化BSON

public class Event
{
    public string Name { get; set; }
    public DateTime StartDate { get; set; }
}
Event e = new Event
{
    Name = "Movie Premiere",
    StartDate = new DateTime(2013, 1, 22, 20, 30, 0, DateTimeKind.Utc)
};


MemoryStream ms = new MemoryStream();
using (BsonWriter writer = new BsonWriter(ms))
{
    JsonSerializer serializer = new JsonSerializer();
    serializer.Serialize(writer, e);
}


string data = Convert.ToBase64String(ms.ToArray());


Console.WriteLine(data);
// MQAAAAJOYW1lAA8AAABNb3ZpZSBQcmVtaWVyZQAJU3RhcnREYXRlAED982M8AQAAAA==

6、读取和写入JSON-使用JsonTextReader读取JSON,使用JsonTextWriter写入JSON

string json = @"{
   'CPU': 'Intel',
   'PSU': '500W',
   'Drives': [
     'DVD read/writer'
     /*(broken)*/,
     '500 gigabyte hard drive',
     '200 gigabyte hard drive'
   ]
}";


JsonTextReader reader = new JsonTextReader(new StringReader(json));
while (reader.Read())
{
    if (reader.Value != null)
    {
        Console.WriteLine("Token: {0}, Value: {1}", reader.TokenType, reader.Value);
    }
    else
    {
        Console.WriteLine("Token: {0}", reader.TokenType);
    }
}


// Token: StartObject
// Token: PropertyName, Value: CPU
// Token: String, Value: Intel
// Token: PropertyName, Value: PSU
// Token: String, Value: 500W
// Token: PropertyName, Value: Drives
// Token: StartArray
// Token: String, Value: DVD read/writer
// Token: Comment, Value: (broken)
// Token: String, Value: 500 gigabyte hard drive
// Token: String, Value: 200 gigabyte hard drive
// Token: EndArray
// Token: EndObject

更多功能见https://github.com/JamesNK/Newtonsoft.Json

以上是关于NET流行高性能JSON框架-Json.NET的主要内容,如果未能解决你的问题,请参考以下文章

Json.NET

.NET Core手记 - Json.NET的使用

Newtonsoft.Json Json.Net01介绍

.Net使用Newtonsoft.Json.dll(JSON.NET)对象序列化成json反序列化json示例教程

如何使用已知的C#框架生成JSON Lines文件?

工具Json.NET更新:对合并对象依赖注入F#以及JSONPath的支持