介绍

1. Newtonsoft.Json 介绍

Newtonsoft.Json(俗称 Json.NET)是 .NET 生态开源 JSON 序列化/反序列化组件

  • 2006 年发布首个版本 Json.NET 1.0.1,现主流版本迭代至 10+
  • 最初兼容 .NET 2.0,适配几乎所有 .NET 框架(Framework/.NET Core/.NET 5+)
  • 程序集:Newtonsoft.Json.dll,通过 NuGet 安装使用
  • 早期源码托管于 CodePlex,现已迁移至 GitHub,大量企业项目广泛使用

2. JSON 是什么

JSON(JavaScript Object Notation,JS对象标记)

  • 轻量级、语言无关的数据交换文本格式,并非 JavaScript 专属
  • 核心结构:键值对 key:value;支持对象 {}、数组 [] 嵌套
{"webname":"FoxDevelop","website":"foxdevelop.com","age":4,"students":[{"name":"tom"},{"name":"bill"}]}Code language: C# (cs)

二、实体类定义(对应JSON结构)

Person.cs(学生对象)
namespace NewtonsoftDemo
{
    public class Person
    {
        public string name { set; get; }
    }
}Code language: C# (cs)
WebInfo.cs(外层主体对象)
namespace NewtonsoftDemo
{
    public class WebInfo
    {
        public string webname { set; get; }
        public string website { set; get; }
        public int age { set; get; }
        public Person[] students { set; get; }
    }
}Code language: C# (cs)

例子-对象序列化为JSON

protected void Page_Load(object sender, EventArgs e)
{
    // 1. 实例化实体对象并赋值
    WebInfo webInfo = new WebInfo();
    webInfo.age = 4;
    webInfo.webname = "FoxDevelop";
    webInfo.website = "foxdevelop.com";
    webInfo.students = new Person[] 
    { 
        new Person { name = "TOM" },
        new Person { name = "JACK" } 
    };

    // 2. Newtonsoft.Json 底层写法:借助JsonWriter序列化
    StringWriter sw = new StringWriter();
    JsonWriter writer = new JsonWriter(sw);
    new JsonSerializer().Serialize(writer, webInfo);
    string json = sw.GetStringBuilder().ToString();
}Code language: C# (cs)

日常更简洁的简化写法

Newtonsoft.Json 提供静态工具方法,替代手动创建 JsonWriter

// 一行完成序列化,开发最常用
string json = JsonConvert.SerializeObject(webInfo);Code language: C# (cs)

输出JSON结果

{
  "webname": "FoxDevelop",
  "website": "foxdevelop.com",
  "age": "4",
  "students": [
    {"name":"TOM"},
    {"name":"JACK"}
  ]
}Code language: C# (cs)

其他

  • System.Text.Json:.NET Core 3.0 之后微软内置JSON库;但老旧 .NET Framework 项目依然普遍使用 Newtonsoft.Json
  • 特性:支持属性别名、忽略字段、日期格式化、循环引用处理等高级功能

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注