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

如何移除NewtonSoft JSON反序列化转换器中的try/catch块?

解决无Schema第三方API反序列化的类型不匹配问题

一、替换try/catch的类型判断逻辑

直接通过Utf8JsonReader的Token类型判断来处理,完全规避try/catch的开销,同时解决复杂数组转string的异常问题:

public class JsonObjectOrArrayToStringConverter : JsonConverter<string>
{
    public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        switch (reader.TokenType)
        {
            case JsonTokenType.Null:
                return null;
            case JsonTokenType.StartObject:
            case JsonTokenType.StartArray:
                // 完整读取整个对象/数组,直接获取原始JSON字符串
                using var document = JsonDocument.ParseValue(ref reader);
                return document.RootElement.GetRawText();
            case JsonTokenType.String:
                return reader.GetString();
            default:
                // 其他基础类型按需处理,这里直接转字符串返回
                return reader.GetRawText();
        }
    }

    public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
    {
        if (string.IsNullOrEmpty(value))
        {
            writer.WriteNullValue();
            return;
        }
        // 写入时尝试还原为原JSON结构,失败则直接写字符串
        try
        {
            using var document = JsonDocument.Parse(value);
            document.RootElement.WriteTo(writer);
        }
        catch
        {
            writer.WriteStringValue(value);
        }
    }
}

核心逻辑:通过TokenType提前识别null、对象、数组、字符串等类型,用JsonDocument.ParseValue完整读取嵌套结构,再通过GetRawText获取原始JSON字符串,彻底解决之前复杂数组转换时的参数异常。

二、实体类中直接标记使用

在需要适配的不确定字段上添加转换器标记即可:

public class ApiResponse
{
    [JsonConverter(typeof(JsonObjectOrArrayToStringConverter))]
    public string ProductInfo { get; set; }
    // 其他固定结构字段...
}

三、适配你的需求场景

这个方案完全不需要JsonExtensionData,不用额外处理中间对象,直接把不确定结构的字段转为原始JSON字符串存储,后续如果需要解析该字段的具体内容,直接把字符串反序列化为对应类型即可。

内容的提问来源于stack exchange,提问作者Danilo Cataldo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:12:34