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;
});

浙公网安备 33010602011771号