如何让JsonConvert.DeserializeObject遇无效JSON返回默认值,无需try/catch与JObject
解决方案:反序列化无效JSON时返回默认值(无需try/catch或JObject)
你可以通过配置JsonSerializerSettings的Error事件来实现需求,具体逻辑如下:
- 创建
JsonSerializerSettings实例并订阅Error事件 - 在事件处理逻辑中,判断异常类型为
JsonReaderException时,将错误标记为已处理,阻止异常抛出 - 使用该配置执行反序列化,无效JSON时会自动返回
TestData的默认值null
代码示例
首先定义你的TestData类(示例):
public class TestData { public string Name { get; set; } public int Age { get; set; } }
然后实现带错误处理的反序列化:
var settings = new JsonSerializerSettings { Error = (sender, args) => { // 仅处理无效JSON导致的JsonReaderException if (args.ErrorContext.Error is JsonReaderException) { args.ErrorContext.Handled = true; } } }; // 无效JSON输入时,data会返回null var data = JsonConvert.DeserializeObject<TestData>("invalid json", settings);
说明
- 该方案利用Json.NET内置的错误处理机制,无需额外的
try/catch块或JObject预验证 - 当错误被标记为已处理(
Handled = true),序列化器会终止处理流程并返回目标类型的默认值 - 因为
TestData是引用类型,其默认值为null,完全匹配你的需求
内容的提问来源于stack exchange,提问作者Farhad Zamani
相关产品推荐
相关产品推荐

