详情

首页手游攻略 .NET 对象转Json的几种常见方式实用指南

.NET 对象转Json的几种常见方式实用指南

佚名 2026-09-01 14:30:01

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“.NET 对象转Json的几种常见方式”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

目录
  • 1. 采用 System.Text.Json (建议,.NET Core 3.0+)
    • 基本序列化
    • 带选项的序列化
  • 2. 采用 Newtonsoft.Json (Json.NET)
    • Newtonsoft.Json 高级用法
  • 3. 处理复杂对象
    • 包含集合的对象
    • 匿名对象序列化
  • 4. 自定义序列化选项
    • System.Text.Json 自定义
    • 采用特性控制序列化
  • 5. 性能优化
    • 采用源生成器 (System.Text.Json)
  • 选择建议

    在.NET中将对象转换为JSON有多种方法,以下是常用的几种方式:

    1. 采用 System.Text.Json (建议,.NET Core 3.0+)

    基本序列化

    using System.Text.Json;

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

    // 对象转JSON
    var person = new Person { Name = "张三", Age = 25, Email = "[email protected]" };
    string jsonString = JsonSerializer.Serialize(person);
    Console.WriteLine(jsonString);
    // 输出: {"Name":"张三","Age":25,"Email":"[email protected]"}

    带选项的序列化

    var options = new JsonSerializerOptions
    {
        WriteIndented = true, // 格式化输出
        PropertyNamingPolicy = JsonNamingPolicy.CamelCase // 驼峰命名
    };

    string jsonString = JsonSerializer.Serialize(person, options);
    Console.WriteLine(jsonString);
    // 输出:
    // {
    // "name": "张三",
    // "age": 25,
    // "email": "[email protected]"
    // }

    2. 采用 Newtonsoft.Json (Json.NET)

    首先安装 NuGet 包:

    Install-Package Newtonsoft.Json

    using Newtonsoft.Json;

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

    // 基本序列化
    var person = new Person { Name = "李四", Age = 30, Email = "[email protected]" };
    string jsonString = JsonConvert.SerializeObject(person);
    Console.WriteLine(jsonString);

    // 带格式的序列化
    string formattedJson = JsonConvert.SerializeObject(person, Formatting.Indented);
    Console.WriteLine(formattedJson);

    Newtonsoft.Json 高级用法

    var settings = new JsonSerializerSettings
    {
        Formatting = Formatting.Indented,
        NullValueHandling = NullValueHandling.Ignore,
        DateFormatString = "yyyy-MM-dd HH:mm:ss"
    };

    string jsonString = JsonConvert.SerializeObject(person, settings);

    3. 处理复杂对象

    包含集合的对象

    public class Department
    {
        public string Name { get; set; }
        public List<Person> Employees { get; set; }
    }

    var department = new Department
    {
        Name = "技术部",
        Employees = new List<Person>
        {
            new Person { Name = "王五", Age = 28, Email = "[email protected]" },
            new Person { Name = "赵六", Age = 32, Email = "[email protected]" }
        }
    };

    string jsonString = JsonSerializer.Serialize(department, new JsonSerializerOptions { WriteIndented = true });
    Console.WriteLine(jsonString);

    匿名对象序列化

    var anonymousObject = new
    {
        Id = 1,
        Description = "测试对象",
        CreateTime = DateTime.Now
    };

    string jsonString = JsonSerializer.Serialize(anonymousObject);
    Console.WriteLine(jsonString);

    4. 自定义序列化选项

    System.Text.Json 自定义

    var options = new JsonSerializerOptions
    {
        WriteIndented = true,
        PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
        DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull,
        Converters = { new JsonStringEnumConverter() } // 枚举转换为字符串
    };

    string jsonString = JsonSerializer.Serialize(person, options);

    采用特性控制序列化

    public class Product
    {
        [JsonPropertyName("productName")] // System.Text.Json
        public string Name { get; set; }
        
        [JsonIgnore] // 忽略该属性
        public string InternalCode { get; set; }
        
        [JsonPropertyOrder(1)] // 属性顺序
        public decimal Price { get; set; }
    }

    5. 性能优化

    采用源生成器 (System.Text.Json)

    [JsonSerializable(typeof(Person))]
    [JsonSerializable(typeof(List<Person>))]
    public partial class MyJsonContext : JsonSerializerContext
    {
    }

    // 使用源生成器进行序列化
    var person = new Person { Name = "测试", Age = 25 };
    string jsonString = JsonSerializer.Serialize(person, MyJsonContext.Default.Person);

    选择建议

    • 新项目:建议采用 System.Text.Json,性能更好,无需额外依赖
    • 现有项目:如果已经在采用 Newtonsoft.Json,能够继续采用
    • 复杂场景:Newtonsoft.Json 功能更丰富,兼容更多复杂场景

    两种方法都很常用,根据项目需求和个人偏好选择即可。

    到此这篇关于.NET 对象转Json的几种常用方式的文章就介绍到这了,更多相关.NET 对象转Json内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多兼容脚本之家!

    您可能感兴趣的文章:

    • C#采用Json.Net对JSON与对象的序列化与反序列化
    • ASP.NET采用Ajax得到Json对象的方法
    • ASP.NET自带对象JSON字符串与实体类的转换
    • ASP.NET中实现把Json数据转换为ADO.NET DataSet对象

    相关资讯
    点击查看更多
    游戏推荐
    推荐专题
    热门阅读
    推荐下载