您的位置:首页 > 汽车 > 新车 > 如何做免费的网站推广_华为应用市场下载安装_如何利用seo赚钱_厦门做网站公司有哪些

如何做免费的网站推广_华为应用市场下载安装_如何利用seo赚钱_厦门做网站公司有哪些

2025/5/7 13:33:14 来源:https://blog.csdn.net/u010784529/article/details/147060387  浏览:    关键词:如何做免费的网站推广_华为应用市场下载安装_如何利用seo赚钱_厦门做网站公司有哪些
如何做免费的网站推广_华为应用市场下载安装_如何利用seo赚钱_厦门做网站公司有哪些
net9.0 中System.Text.Json 测试惊喜的发现当前版本循环引用序列化未报错,并且能正常序列化成功,故做此记录。测试结果仅做参考!!!
配置选项
     # 配置说明JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions{PropertyNameCaseInsensitive = true, // 属性名称大小写不敏感PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // 属性名称使用驼峰命名规则WriteIndented = true, // 设置格式化输出Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, // 允许特殊字符ReadCommentHandling = JsonCommentHandling.Skip, // 忽略注释AllowTrailingCommas = true, // 忽略尾随逗号NumberHandling = JsonNumberHandling.AllowReadingFromString, // 允许数字字符串Converters = { new DatetimeJsonConverter() } // 注册你的自定义转换器, };
DatetimeJsonConverter 自定义解析
/// <summary>
/// 时间字符串格式化
/// </summary>
public class DatetimeJsonConverter : JsonConverter<DateTime>
{public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options){if (reader.TokenType == JsonTokenType.String){if (DateTime.TryParse(reader.GetString(), out DateTime date))return date;}return reader.GetDateTime();}public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options){writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss"));}
}/// <summary>
/// Unix格式时间格式化
/// </summary>
public class UnixTimeConverter : JsonConverter<DateTime>
{public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options){if (reader.TokenType == JsonTokenType.String){if (long.TryParse(reader.GetString(), out long timestamp))return DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;}if (reader.TokenType == JsonTokenType.Number){long timestamp = reader.GetInt64();return DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;}return reader.GetDateTime();}public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options){long timestamp = new DateTimeOffset(value).ToUnixTimeSeconds();writer.WriteStringValue(timestamp.ToString());}
}
测试
 public class TestJson{/// <summary>/// 名称/// </summary>public string? Name { get; set; }public TestBaseJson TestBaseJson { get; set;}}//[JsonPolymorphic(TypeDiscriminatorPropertyName = "TestBaseJson")]//[JsonDerivedType(typeof(TestBaseJson))]public class TestBaseJson{public string? Name { get; set; }public int Id { get; set; }public TestBaseJson TestBase { get; set; }}TestJson testJson =new() {Name = "ces",Date=DateTime.Now,TestBaseJson = new TestBaseJson() { Id = 123, Name = "测试",TestBase = new TestBaseJson() {Id = 123, Name = "2222"} }};JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions{PropertyNameCaseInsensitive = true, // 属性名称大小写不敏感PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // 属性名称使用驼峰命名规则WriteIndented = true, // 设置格式化输出Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, // 允许特殊字符ReadCommentHandling = JsonCommentHandling.Skip, // 忽略注释AllowTrailingCommas = true, // 忽略尾随逗号NumberHandling = JsonNumberHandling.AllowReadingFromString, // 允许数字字符串Converters = { new DatetimeJsonConverter() } // 注册你的自定义转换器, };// 序列化Console.WriteLine(JsonSerializer.Serialize(testJson, jsonSerializerOptions));// 反序列化//string jsonStr = "{\r\n  \"name\": \"ces\",\r\n  \"testBaseJson\": {\r\n    \"name\": \"测试\",\r\n    \"id\": 123,\r\n    \"testBase\": {\r\n      \"name\": \"2222\",\r\n      \"id\": 123,\r\n      \"testBase\": null\r\n    }\r\n  },\r\n  \"date\": \"2025-04-08 10:19:43\"\r\n}";// 或者string jsonStr = "{\"name\":\"ces\",\"testBaseJson\":{\"Name\":\"测试\",\"id\":\"123\",\"testBase\":{\"name\":\"2222\",\"id\":123,\"testBase\":null,}},\"date\":\"2025-04-08 10:19:43\"}";// 这里加了多余逗号,数字字符串,大小写等,进行反序列化TestJson testJson2 = JsonSerializer.Deserialize<TestJson>(jsonStr, jsonSerializerOptions);

序列化

反序列化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com