开发者

C#下Newtonsoft.Json的具体使用

开发者 https://www.devze.com 2025-08-24 10:18 出处:网络 作者: 生命不息-学无止境
目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化 JSON 为 C# 对象高级用法1. 序列化时格式化 JSON(缩进)2. 处理复杂对象3. 反序列化为动态对象4. 忽略属性5. 更改属性名称6. 处理枚举配置 J
目录
  • 安装 Newtonsoft.json
  • 基本用法
    • 1. 序列化 C# 对象为 JSON
    • 2. 反序列化 JSON 为 C# 对象
  • 高级用法
    • 1. 序列化时格式化 JSON(缩进)
    • 2. 处理复杂对象
    • 3. 反序列化为动态对象
    • 4. 忽略属性
    • 5. 更改属性名称
    • 6. 处理枚举
  • 配置 JsonSerializerSettings
    • 处理自定义对象(自定义序列化与反序列化)
      • 处理 JSON 数组
        • 总结

          Newtonsoft.Json 是一个非常流行的 C# JSON 序列化和反序列化库,它可以方便地将 C# 对象转换为 JSON 格式,或者将 JSON 数据解析为 C# 对象。Newtonsoft.Json 被广泛用于处理 JSON 数据,因其简单、高效且功能强大。

          以下是 Newtonsoft.Json 在 C# 中的详细使用教程。

          安装 Newtonsoft.Json

          在使用 Newtonsoft.Json 之前,你需要安装它。最简单的方式是通过 NuGet:

          1. 打开 Visual Studio。
          2. 在解决方案资源管理器中右键点击项目,然后选择“管理 NuGet 包”。
          3. 搜索 Newtonsoft.Json,然后点击“安装”。

          也可以使用以下命令通过 NuGet 控制台安装:

          Install-Package Newtonsoft.Json
          

          基本用法

          1. 序列化 C# 对象为 JSON

          要将 C# 对象转换为 JSON 字符串,可以使用 JsonConvert.SerializeObject() 方法。

          using Newtonsoft.Json;
          
          public class Person
          {
              public string Name { get; set; }
              public int Age { get; set; }
          }
          
          var person = new Person
          {
              Name = "John",
              Age = 30
          };
          
          string json = JsonConvert.SerializeObject(person);
          Console.WriteLine(json);
          

          输出:

          {"Name":"John","Age":30}
          

          2. 反序列化 JSON 为 C# 对象

          要将 JSON 字符串转换为 C# 对象,可以使用 JsonConvert.DeserializeObject<T>() 方法python

          string json = "{\"Name\":\"John\",\"Age\":30}";
          
          Person person = JsonConvert.DeserializeObject<Person>(json);
          Console.WriteLine(person.Name);  // 输出:John
          Console.WriteLine(person.Age);   // 输出:30
          

          高级用法

          1. 序列化时格式化 JSON(缩进)

          为了提高可读性,可以使用 Formatting.Indented 选项将 JSON 格式化为缩进的样式:

          string formattedJson = JsonConvert.SerializeObject(person, Formatting.Indented);
          Console.WriteLine(formattedJson);
          

          输出:

          {
            "Name": "John",
            "Age": 30
          }
          

          2. 处理复杂对象

          Newtonsoft.Json 可以处理复杂的对象,例如包含嵌套对象或集合的对象。

          public class Address
          {
              public string Street { get; set; }
              public string City { get; set; }
          }
          
          public class Person
          {
              public string Name { get; set; }
              public int Age { get; set; }
              public Address Address { get; set; }
          }
          
          var person = new Person
          {
              Name = "John",
              Age = 30,
              Address = new Address { Street = "123 Main St", City = "New York" }
          };
          
          string json = JsonConvert.SerializeObject(person, Formatting.Indented);
          Console.WriteLine(json);
          

          输出:

          {
            "Name": "John",
            "Age": 30,
            "Address": {
              "Street": "123 Main St",
              "City": "New York"
            }
          }
          

          3. 反序列化为动态对象

          可以将 JSON 解析为动态对象,允许你在运行时灵活地访问 JSON 数据。

          string json = "{\"Name\":\"John\",\"Age\":30}";
          
          dynamic obj = JsonConvert.DeserializeObject<dynamic>(json);
          Console.WriteLine(obj.Name);  // 输出:John
          Console.WriteLine(obj.Age);   // 输出:30
          

          4. 忽略属性

          如果你不希望某些属性被序列化,可以使用 JsonIgnore 特性。

          public class Person
          {
              public string Name { get; set; }
          
              [JsonIgnore]
              public int Age { get; set; }
          }
          
          var person = new Person
          {
              Name = "John",
              Age = 30
          };
          
          string json = JsonConvert.SerializeObject(person);
          Console.WriteLine(jsonphp);  // 输出:{"Name":"John"}
          

          5. 更改属性名称

          可以使用 JsonProperty 特性为属性指定自定义的 JSON 字段名称。

          public class Person
          {
              [JsonProperty("full_name")]
              public string Name { get; set; }
          
              android[JsonProperty("years")]
              public int Age { get; set; }
          }
          
          var person = new Person
          {
              Name = "John",
              Age = 30
          };
          
          string json = JsonConvert.SerializeObject(person);
          Console.WriteLine(json);  // 输出:{"full_name":"John","years":30}
          

          6. 处理枚举

          可以自定义枚举的序列化方式,使其输出字符串,而不是数字。

          public enum Gender
          {
              Male,
              Female
          }
          
          public class Person
          {
              public string Name { get; set; }
              public Gender Gender { get; set; }
          }
          
          var person = new Person
          {
              Name = "John",
              Gender = Gender.Male
          };
          
          string json = JsonConvert.SerializeObject(person);
          Console.WriteLine(json);  // 输出:{"Name":"John","Gender":0}
          
          string jsonWithStringEnum = JsonConvert.SerializeObject(person, new StringEnumConverter());
          Console.WriteLine(jsonWithStringEnum);  // 输python出:{"Name":"John","Gender":"Male"}
          

          配置 JsonSerializerSettings

          通过 JsonSerializerSettings,你可以更细粒度地控制 JSON 序列化和反序列化行为。

          JsonSerializerSettings settings = new JsonSerializerSettings
          {
              NullValueHandling = NullValueHandling.Ignore,
              DefaultValueHandling = DefaultValueHandling.Ignore
          };
          
          string json = JsonConvert.SerializeObject(person, settings);
          Console.WriteLine(json);
          

          处理自定义对象(自定义序列化与反序列化)

          你可以通过实现 JsonConverter 自定义对象的序列化和反序列化行为。

          public class CustomPersonConverter : JsonConverter<Person>
          {
              public override void WriteJson(JsonWriter writer, Person value, JsonSerializer serializer)
              {
                  writer.WriteStartObject();
                  writer.WritePropertyName("full_name");
                  writer.WriteValue(value.Name);
                  writer.WriteEndObject();
          python    }
          
              public override Person ReadJson(JsonReader reader, Type objectType, Person existingValue, bool hasExistingValue, JsonSerializer serializer)
              {
                  JObject jo = JObject.Load(reader);
                  return new Person { Name = (string)jo["full_name"] };
              }
          }
          
          var person = new Person { Name = "John", Age = 30 };
          string customJson = JsonConvert.SerializeObject(person, new CustomPersonConverter());
          Console.WriteLine(customJson);  // 输出:{"full_name":"John"}
          
          Person customPerson = JsonConvert.DeserializeObject<Person>(customJson, new CustomPersonConverter());
          Console.WriteLine(customPerson.Name);  // 输出:John
          

          处理 JSON 数组

          你可以将 JSON 数组序列化和反序列化为 C# 集合类型,如 List<T> 或数组。

          string jsonArray = "[{\"Name\":\"John\",\"Age\":30},{\"Name\":\"Jane\",\"Age\":25}]";
          List<Person> people = JsonConvert.DeserializeObject<List<Person>>(jsonArray);
          
          foreach (var person in people)
          {
              Console.WriteLine($"{person.Name}, {person.Age}");
          }
          

          总结

          Newtonsoft.Json 是 C# 中最常用的 JSON 序列化和反序列化库之一,具有强大的功能和易于使用的 API。它能够处理简单和复杂的对象,支持定制化序列化、反序列化,适用于动态对象以及复杂的数据结构。

          到此这篇关于C#下Newtonsoft.Json的具体使用的文章就介绍到这了,更多相关C# Newtonsoft.Json内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

          0

          精彩评论

          暂无评论...
          验证码 换一张
          取 消

          关注公众号