.NET 对象转Json的几种常见方式
作者:Yashar Qian
本文介绍了.NET中将对象转换为JSON的常用方法,包括使用System.Text.Json和Newtonsoft.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 = "zhangsan@example.com" };
string jsonString = JsonSerializer.Serialize(person);
Console.WriteLine(jsonString);
// 输出: {"Name":"张三","Age":25,"Email":"zhangsan@example.com"}
带选项的序列化
var options = new JsonSerializerOptions
{
WriteIndented = true, // 格式化输出
PropertyNamingPolicy = JsonNamingPolicy.CamelCase // 驼峰命名
};
string jsonString = JsonSerializer.Serialize(person, options);
Console.WriteLine(jsonString);
// 输出:
// {
// "name": "张三",
// "age": 25,
// "email": "zhangsan@example.com"
// }
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 = "lisi@example.com" };
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 = "wangwu@example.com" },
new Person { Name = "赵六", Age = 32, Email = "zhaoliu@example.com" }
}
};
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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
