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.读取与写入
// 读取 var str = File.ReadAllText(fileName); var data = JsonSerializer.DeserializeObject<List<Demo>>(str); // 写入 str = JsonSerializer.Serialize(DemoEntity); File.WriteAllText(fileName, str);
2.格式化json字符串
/// <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.反序列化
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); } }
序列化时要求输出值都默认带双引号
string pattern = @":([0-9]{10,})"; MatchCollection matches = Regex.Matches(json, pattern); Regex regex = new Regex(pattern); var ouputStr = regex.Replace(json, ":\"$1\"");
WebApi 自定义时间输出格式
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 自定义全小写输出格式
/// <summary> /// 返回对象全小写 /// </summary> public class LowercasePolicy : JsonNamingPolicy { public override string ConvertName(string name) => name.ToLower(); }
Program.cs 全局配置
builder.Services.AddControllers().AddJsonOptions(options => { //自定义输出的时间格式 options.JsonSerializerOptions.Converters.Add(new DateTimeJsonConverter());
//自定义输出的全小写 option.JsonSerializerOptions.PropertyNamingPolicy = new LowercasePolicy(); });
其他配置
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;
});