You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让JsonConvert.DeserializeObject遇无效JSON返回默认值,无需try/catch与JObject

解决方案:反序列化无效JSON时返回默认值(无需try/catch或JObject)

你可以通过配置JsonSerializerSettings的Error事件来实现需求,具体逻辑如下:

  1. 创建JsonSerializerSettings实例并订阅Error事件
  2. 在事件处理逻辑中,判断异常类型为JsonReaderException时,将错误标记为已处理,阻止异常抛出
  3. 使用该配置执行反序列化,无效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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 08:10:21