System.Text.Json 使用
参考:https://www.cnblogs.com/RainFate/p/15720684.html
在.NET Core 3.0中加入了对JSON的内置支持
using System.Text.Json; using System.Text.Json.Serialization; |
1.读取与写入
1 2 3 4 5 6 7 | // 读取 var str = File.ReadAllText(fileName); var data = JsonSerializer.DeserializeObject<List<Demo>>(str); // 写入 str = JsonSerializer.Serialize(DemoEntity); File.WriteAllText(fileName, str); |
2.格式化json字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /// <summary> /// 格式化JSON字符串 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> /// <returns></returns> public static string ToJsonString<T>( this T obj) { if (obj != null ) { var setting = new JsonSerializerOptions { WriteIndented = true , }; return JsonSerializer.Serialize(obj, setting); } return string .Empty; } |
3.反序列化
1 2 3 4 | public static T ToObject<T>( this string jsonStr) { return JsonSerializer.Deserialize<T>(jsonStr); } |
4.小驼峰格式反序列化
/// <summary> /// 小驼峰格式序列化。 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="entity">类型对象</param> /// <returns></returns> public static string SerializeWithCamel<T>( this T entity) { // 小驼峰序列化 var setting = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; return JsonSerializer.Serialize(entity, setting); } |
5.小驼峰格式反序列化
/// <summary> /// 小驼峰格式反序列化。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="str"></param> /// <returns></returns> public static T DeserializeWithCamel<T>( this string str) { if (str != null ) { // 小驼峰序列化 var setting = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; return JsonSerializer.Deserialize<T>(str, setting); } else { return default (T); } } |
序列化时要求输出值都默认带双引号
1 2 3 4 | string pattern = @":([0-9]{10,})" ; MatchCollection matches = Regex.Matches(json, pattern); Regex regex = new Regex(pattern); var ouputStr = regex.Replace(json, ":\"$1\"" ); |
WebApi 自定义时间输出格式
1 2 3 4 5 6 7 8 9 10 11 12 | public class DateTimeJsonConverter : JsonConverter<DateTime> { public override DateTime Read( ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return DateTime.Parse(reader.GetString()); } public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToString( "yyyy-MM-dd HH:mm:ss" )); } } |
WebApi 自定义全小写输出格式
1 2 3 4 5 6 7 8 | /// <summary> /// 返回对象全小写 /// </summary> public class LowercasePolicy : JsonNamingPolicy { public override string ConvertName( string name) => name.ToLower(); } |
Program.cs 全局配置
1 2 3 4 5 | builder.Services.AddControllers().AddJsonOptions(options => { //自定义输出的时间格式 options.JsonSerializerOptions.Converters.Add(new DateTimeJsonConverter()); //自定义输出的全小写 option.JsonSerializerOptions.PropertyNamingPolicy = new LowercasePolicy(); }); |
其他配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | services.AddJsonOptions(options => { //格式化日期时间格式 options.JsonSerializerOptions.Converters.Add( new DatetimeJsonConverter()); //数据格式首字母小写 //options.JsonSerializerOptions.PropertyNamingPolicy =JsonNamingPolicy.CamelCase; //数据格式原样输出 options.JsonSerializerOptions.PropertyNamingPolicy = null ; //取消Unicode编码,解决后端返回数据中文被编码 options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All); //忽略空值 options.JsonSerializerOptions.IgnoreNullValues = true ; //允许额外符号 options.JsonSerializerOptions.AllowTrailingCommas = true ; //反序列化过程中属性名称是否使用不区分大小写的比较 options.JsonSerializerOptions.PropertyNameCaseInsensitive = false ; }); |
分类:
Asp.Net Core
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?