1.Newtonsoft.Json/Json.NET忽略序列化时的意外错误
2.Winform 使用WebView2 开发现代应用3.C#中 Task 结合 CancellationTokenSource的妙用在.NET中Newtonsoft.Json(Json.NET)是我们常用来进行Json序列化与反序列化的库。
而在使用中常会遇到反序列化Json时,遇到不规则的Json数据解构而抛出异常。
Newtonsoft.Json 支持序列化和反序列化过程中的错误处理。
允许您捕获错误并选择是处理它并继续序列化,还是让错误冒泡并抛出到您的应用程序中。
错误处理是通过两种方法定义的: JsonSerializerSettings 上的ErrorEvent和OnErrorAttribute。
ErrorEvent
下面是个ErrorEvent的例子,下面的例子中我们既能正确反序列化列表中的事件类型,也能捕获其中的错误事件
List<string> errors = new List<string>(); List<DateTime> c = JsonConvert.DeserializeObject<List<DateTime>>(@"[ '2009-09-09T00:00:00Z', 'I am not a date and will error!', [ 1 ], '1977-02-20T00:00:00Z', null, '2000-12-01T00:00:00Z' ]", new JsonSerializerSettings { Error = delegate(object sender, ErrorEventArgs args) { errors.Add(args.ErrorContext.Error.Message); args.ErrorContext.Handled = true; }, Converters = { new IsoDateTimeConverter() } }); // 2009-09-09T00:00:00Z // 1977-02-20T00:00:00Z // 2000-12-01T00:00:00Z
OnErrorAttribute
OnErrorAttribute的工作方式与 Newtonsoft.Json 的其他.NET 序列化属性非常相似。
您只需将该属性放置在采用正确参数的方法上:StreamingContext 和 ErrorContext。方法的名称并不重要。
public class PersonError { private List<string> _roles; public string Name { get; set; } public int Age { get; set; } public List<string> Roles { get { if (_roles == null) { throw new Exception("Roles not loaded!"); } return _roles; } set { _roles = value; } } public string Title { get; set; } [OnError] internal void OnError(StreamingContext context, ErrorContext errorContext) { errorContext.Handled = true; } } PersonError person = new PersonError { Name = "George Michael Bluth", Age = 16, Roles = null, Title = "Mister Manager" }; string json = JsonConvert.SerializeObject(person, Formatting.Indented); Console.WriteLine(json); //{ // "Name": "George Michael Bluth", // "Age": 16, // "Title": "Mister Manager" //}

【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
2022-03-21 k8s原来这么简单(一)核心组件与工作原理