C# Newtonsoft.Json 浅析

C# Newtonsoft.Json 浅析

编码文章call10242025-06-23 14:49:393A+A-

Newtonsoft.Json 是 C# 中一个流行的 JSON 库,提供了丰富的方法来帮助我们序列化、反序列化、转换 JSON 数据。下面是 Newtonsoft.Json 中常用方法的详解:

一、序列化

最常用的序列化方法是
JsonConvert.SerializeObject(object)
,它可以将一个对象序列化为 JSON 字符串。

var obj = new { Name = "Tom", Age = 18 };
string json = JsonConvert.SerializeObject(obj);
// {"Name":"Tom","Age":18}

此外,JsonConvert 还提供了其他选项,例如:

  • JsonConvert.SerializeObject(object, Formatting):指定 JSON 字符串的格式;
  • JsonConvert.SerializeObject(object, JsonSerializerSettings):通过 JsonSerializerSettings 参数配置序列化过程;
  • JsonConvert.SerializeObject(object, params JsonConverter[]):使用指定的 JsonConverter 类型将对象序列化为 JSON,可以实现自定义序列化逻辑。

二、反序列化

最常用的反序列化方法是
JsonConvert.DeserializeObject<T>(string)
,它可以将 JSON 字符串反序列化为指定的类型。

string json = @"{""Name"":""Tom"",""Age"":18}";
var obj = JsonConvert.DeserializeObject<Person>(json);

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

与序列化类似,反序列化方法也提供了其他选项:

  • JsonConvert.DeserializeObject<T>(string, JsonSerializerSettings):通过 JsonSerializerSettings 参数配置反序列化过程;
  • JsonConvert.DeserializeObject(string, Type):可以反序列化为任意类型,使其适用于动态类型的场景;
  • JsonConvert.DeserializeObject<T>(JsonReader):从 JsonReader 对象中反序列化,常用于处理大型 JSON 数据。

三、JsonReader 和 JsonWriter

JsonReader 和 JsonWriter 是 Newtonsoft.Json 提供的用于读取和写入 JSON 数据的低级 API。

JsonReader 可以从一个 JsonReader 对象中读取 JSON 数据,其中包含多种不同的方法用于读取不同类型的 JSON 值,例如:

  • JsonReader.Read():将 JsonReader 对象读取到下一个 JSON 令牌;
  • JsonReader.ReadAsInt32():将当前令牌转换为 int 类型的值;
  • JsonReader.ReadAsBoolean():将当前令牌转换为 bool 类型的值。

JsonWriter 可以将 JSON 数据写入到一个 JsonWriter 对象,例如:

var person = new { Name = "Tom", Age = 18 };
using (var writer = new StringWriter())
using (var jsonWriter = new JsonTextWriter(writer))
{
    jsonWriter.WriteStartObject();
    jsonWriter.WritePropertyName("Name");
    jsonWriter.WriteValue(person.Name);
    jsonWriter.WritePropertyName("Age");
    jsonWriter.WriteValue(person.Age);
    jsonWriter.WriteEndObject();

    string json = writer.ToString();
    Console.WriteLine(json);
    // {"Name":"Tom","Age":18}
}

四、LINQ to JSON

除了使用对象和属性来访问和修改 JSON 数据外,Newtonsoft.Json 还提供了 LINQ to JSON API 来解析和创建 JSON 数据。

使用 LINQ to JSON API,你可以轻松地将 JSON 数据解析为 JObject 或 JArray,然后就可以使用 LINQ 功能来处理数据。例如:

string json = @"{
    'Name': 'Tom',
    'Age': 18,
    'Address': {
        'City': 'Shanghai',
        'Country': 'China'
    }
}";

JObject obj = JObject.Parse(json);
string name = (string)obj["Name"];
int age = (int)obj["Age"];

var address = obj["Address"];
string city = (string)address["City"];
string country = (string)address["Country"];

要创建 JSON,您可以使用 JObject 和 JArray 类型:

var person = new JObject();
person["Name"] = "Tom";
person["Age"] = 18;

var address = new JObject();
address["City"] = "Shanghai";
address["Country"] = "China";

person["Address"] = address;

Console.WriteLine(person.ToString());
// {"Name":"Tom","Age":18,"Address":{"City":"Shanghai","Country":"China"}}

总的来说,Newtonsoft.Json 是一个非常强大和灵活的 JSON 库,提供了丰富的方法来处理 JSON 数据。

除了上述方法外,还有以下一些常用的方法:

五、匿名类型和 JSON

在使用
JsonConvert.SerializeObject() 方法时,可以通过传递一个匿名对象来进行动态序列化。例如:

string json = JsonConvert.SerializeObject(new
{
    Name = "Tom",
    Age = 18
});

// {"Name":"Tom","Age":18}

六、自定义序列化

如果要对对象进行自定义序列化,可以使用自定义的 JsonConverter,例如:

public class CustomConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(Person);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        // 从 reader 中读取 JSON 数据,并将其转换为 Person 对象
        // ...
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        // 将 Person 对象序列化为 JSON 数据,并写入 writer 中
        // ...
    }
}

var settings = new JsonSerializerSettings();
settings.Converters.Add(new CustomConverter());

string json = JsonConvert.SerializeObject(new Person { Name = "Tom", Age = 18 }, settings);

在上面的代码中,我们创建了一个名为 CustomConverter 的 JsonConverter 类型,重写了它的 CanConvert()、ReadJson() 和 WriteJson() 方法来实现自定义序列化和反序列化。

七、预设的 JsonConverter

Newtonsoft.Json 还提供了一些预设的 JsonConverter,用于处理特定的类型或场景。例如:

  • StringEnumConverter:将枚举值序列化为字符串;
  • IsoDateTimeConverter:将 DateTime 对象序列化为 ISO 8601 格式的字符串;
  • XmlConverter:将 XML 转换为 JSON 或将 JSON 转换为 XML;
  • BinaryConverter:将字节数组序列化为 Base64 编码的字符串。

使用预设的 JsonConverter,可以方便地处理常见的序列化场景。

总的来说,Newtonsoft.Json 提供了丰富的方法和功能,能够轻松地处理 JSON 数据。无论是序列化、反序列化还是修改 JSON 数据,Newtonsoft.Json 都是一个非常值得推荐的 JSON 库。

创作不易,如果您喜欢还请帮忙点赞关注,谢谢!

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4