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

第三方API返回混合类型字段的C# Json反序列化问题

解决方案:处理JSON中字段类型不一致的反序列化问题

方案一:自定义JsonConverter(推荐)

这种方法能优雅统一两种类型的映射逻辑,是最可靠的解决方案。

  1. 实现自定义转换器,处理空对象与字符串的转换逻辑:
public class StringOrEmptyObjectConverter : JsonConverter<string>
{
    public override string ReadJson(JsonReader reader, Type objectType, string existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        if (reader.TokenType == JsonToken.String)
        {
            return (string)reader.Value;
        }
        else if (reader.TokenType == JsonToken.StartObject)
        {
            // 跳过空对象的解析流程
            serializer.Deserialize(reader, typeof(object));
            return null; // 可根据业务需求改为返回空字符串""
        }
        return null;
    }

    public override void WriteJson(JsonWriter writer, string value, JsonSerializer serializer)
    {
        writer.WriteValue(value);
    }
}
  1. 修改CustomClass,为contact字段添加转换器特性:
public class CustomClass
{
    public string name;
    [JsonConverter(typeof(StringOrEmptyObjectConverter))]
    public string contact;
}
  1. 反序列化代码保持原有逻辑即可正常执行:
public List<CustomClass> ReadAndDeserialIntoObject(string filePath)
{
    var objSer = JsonConvert.DeserializeObject<List<CustomClass>>(File.ReadAllText(filePath));
    Console.WriteLine(objSer);
    return objSer;
}

处理后,JSON中的空对象{}会被转为null(或自定义的空字符串),字符串类型则直接保留原值,反序列化流程不会再报错。

方案二:用object类型接收后处理(临时快速方案)

如果不想编写转换器,可先用object类型接收字段,再在后续逻辑中统一处理:

  1. 定义CustomClass:
public class CustomClass
{
    public string name;
    public object contact;
}
  1. 反序列化后对contact字段做类型判断与转换:
public List<CustomClass> ReadAndDeserialIntoObject(string filePath)
{
    var objList = JsonConvert.DeserializeObject<List<CustomClass>>(File.ReadAllText(filePath));
    foreach (var obj in objList)
    {
        if (obj.contact is JObject)
        {
            obj.contact = null; // 或转换为空字符串
        }
    }
    Console.WriteLine(objList);
    return objList;
}

这种方法适合临时场景,但会增加业务逻辑的耦合度,长期维护推荐使用方案一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:06:30