平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“.NET实现方法对象转JSON的方式总结”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
前几天在其中一个群里看到个挺有意思的对话:
在这个场景下,说实话,这种困惑太常用了。.NET里对象转JSON的方式确实不少,而且各有各的脾气。今天咱们就把这事捋清楚,以后别再纠结了。
一句话总结:
下面一个一个聊,看看它们到底有啥不一样。
从.NET Core 3.0开始,微软自己搞了个JSON处理库,就是System.Text.Json。为啥要自己造轮子?因为要追求高性能、低内存占用,充分借助了Span<T>这些现代.NET特性。
基本用法:
using System.Text.Json;
var user = new { Name = "码农刚子", Age = 30, City = "北京" };
// 基础序列化
string jsonString = JsonSerializer.Serialize(user);
// 带配置的序列化(格式化输出)
var options = new JsonSerializerOptions
{
WriteIndented = true, // 格式化,更易读
PropertyNamingPolicy = JsonNamingPolicy.CamelCase // 驼峰命名
};
string prettyJson = JsonSerializer.Serialize(user, options);
它强在哪?
它坑在哪?
适用场景:
在System.Text.Json从实现思路看,出生之前,Newtonsoft.Json就是.NET社区的事实标准。几乎所有.NET项目都在用它,至今仍有大量项目依赖。
基本用法:
using Newtonsoft.Json;
var user = new { Name = "码农刚子", Age = 30, City = "北京" };
// 基础序列化
string jsonString = JsonConvert.SerializeObject(user);
// 带配置的序列化
var settings = new JsonSerializerSettings
{
Formatting = Formatting.Indented, // 格式化
ReferenceLoopHandling = ReferenceLoopHandling.Ignore // 忽略循环引用
};
string complexJson = JsonConvert.SerializeObject(user, settings);
它强在哪?
它坑在哪?
适用场景:
结合项目来看,若你对性能有近乎苛刻的要求,比如高频交易、游戏服务器这类场景,能够看看Utf8Json。
基本用法:
using Utf8Json;
var product = new { ID = 101, Name = "鼠标", Price = 99.9 };
// 直接序列化为二进制字节数组(最快)
byte[] jsonBytes = JsonSerializer.Serialize(product);
// 转成字符串
string jsonString = JsonSerializer.ToJsonString(product);
它强在哪?
它坑在哪?
适用场景:
看完了上面三种,估计有人要问:那我到底该用哪个?
我一般这么建议:
1. 如果你是全新项目,用.NET Core 3.0以上:优先用System.Text.Json。官方出品,性能好,少装一个包是一个,以后升级也省心。
2. 如果你在维护老项目:继续用Newtonsoft.Json,别折腾。老代码跑得好好的,换库容易出幺蛾子。
3. 如果你的项目已经用了Newtonsoft,但想换:建议谨慎。两个库有不少差异:
真想换,做好充分测试。
4. 如果你在写性能敏感的核心代码:能够考虑局部用Utf8Json做优化,但别整个项目都用,毕竟功能有限。
给System.Text.Json设置全局选项:
// Program.cs 或 Startup.cs
builder.Services.Configure<JsonOptions>(options =>
{
options.SerializerOptions.WriteIndented = true;
options.SerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
options.SerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
});
Newtonsoft.Json处理循环引用:
var settings = new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore, // 忽略循环引用
PreserveReferencesHandling = PreserveReferencesHandling.Objects // 或保留引用
};
var json = JsonConvert.SerializeObject(objWithCycle, settings);
性能优化小贴士:
结合项目来看,对象转JSON这事儿,说大不大,说小不小。选对了库,代码跑得溜;选错了,要么功能不够用,要么性能拉胯。
记住这个原则,以后别再凭感觉选了。
到此这篇关于.NET实现对象转JSON的方式总结的文章就介绍到这了,更多相关.NET对象转JSON内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多兼容脚本之家!