System.Text.Json 自定义Converter实现时间转换
2021-04-23 15:26
标签:ext data- 没有 target board ber sof rac property
方式设置接收/序列化时间格式,但在.net core 3.1中System.Text.Json是没有自带方式进行转换,这就需要自定义Converter实现时间转换
Newtonsoft.Json与System.Text.Json区别#
在 Newtonsoft.Json中可以使用例如
.AddJsonOptions(options =>
{
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
})
官方GitHub地址
自定义DateTimeJsonConverter#
>
{
private readonly string _dateFormatString;
public DateTimeJsonConverter()
{
_dateFormatString = "yyyy-MM-dd HH:mm:ss";
}
public DateTimeJsonConverter(string dateFormatString)
{
_dateFormatString = dateFormatString;
}
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.ToUniversalTime().ToString(_dateFormatString));
}
}
public class DateTimeJsonConverter : JsonConverterDateTime
JsonTokenType枚举类型共有以下几种#
Copy///
Defines the various JSON tokens that make up a JSON text. public enum JsonTokenType : byte { /// There is no value (as distinct from ). None, /// The token type is the start of a JSON object. StartObject, /// The token type is the end of a JSON object. EndObject, /// The token type is the start of a JSON array. StartArray, /// The token type is the end of a JSON array. EndArray, /// The token type is a JSON property name. PropertyName, /// The token type is a comment string. Comment, /// The token type is a JSON string. String, /// The token type is a JSON number. Number, /// The token type is the JSON literal true. True, /// The token type is the JSON literal false. False, /// The token type is the JSON literal null. Null, }
services.AddMvc 中 Newtonsoft.Json与System.Text.Json 配置区别#
.netcore 2.1#
Copyservices //全局配置Json序列化处理 .AddJsonOptions(options => { //忽略循环引用 options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; //不使用驼峰样式的key options.SerializerSettings.ContractResolver = new DefaultContractResolver(); //设置时间格式 options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; })
.netcore 3.1#
Copyservices.AddControllers() .AddJsonOptions(options => { //设置时间格式 options.JsonSerializerOptions.Converters.Add(new DateTimeJsonConverter("yyyy-MM-dd HH:mm:ss")); //设置bool获取格式 options.JsonSerializerOptions.Converters.Add(new BoolJsonConverter()); //不使用驼峰样式的key options.JsonSerializerOptions.PropertyNamingPolicy = null; //不使用驼峰样式的key options.JsonSerializerOptions.DictionaryKeyPolicy = null; //获取或设置要在转义字符串时使用的编码器 options.JsonSerializerOptions.Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping; });
bool型转换问题#
.netcore 3.1中接收的json中不能将 "true"/"false"
识别为boolean的True/False,这也需要自定义Converter实现bool转换
Copynamespace Kdniao.Core.Utility { public class BoolJsonConverter : JsonConverterbool> { public override bool Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.True || reader.TokenType == JsonTokenType.False) return reader.GetBoolean(); return bool.Parse(reader.GetString()); } public override void Write(Utf8JsonWriter writer, bool value, JsonSerializerOptions options) { writer.WriteBooleanValue(value); } } }
System.Text.Json 自定义Converter实现时间转换
标签:ext data- 没有 target board ber sof rac property
原文地址:https://www.cnblogs.com/lonelyxmas/p/12239127.html
上一篇:python中的函数与文件操作
下一篇:CSS基础-BFC块格式上下文
文章标题:System.Text.Json 自定义Converter实现时间转换
文章链接:http://soscw.com/index.php/essay/78557.html