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

C#中如何在执行反序列化操作前判断目标对象的类类型

方案1:手动添加类型标记(最小改动适配现有架构)

序列化阶段额外将对象类型标识写入文件,反序列化时先读取类型标识再调用对应泛型方法即可,无需修改原有类定义:

修改后的序列化代码

// 写入类型标识
writer.Write(CurrentCar.GetType().Name);
// 无需逐个判断类型,直接按实际类型序列化
var JSON_CAR = JsonSerializer.Serialize(CurrentCar, CurrentCar.GetType());
writer.Write(JSON_CAR);

反序列化代码

// 先读取类型标识
string carType = reader.ReadString();
string carJson = reader.ReadString();

CurrentCar = carType switch
{
    nameof(Ford) => JsonSerializer.Deserialize<Ford>(carJson),
    nameof(Lexus) => JsonSerializer.Deserialize<Lexus>(carJson),
    nameof(Dodge) => JsonSerializer.Deserialize<Dodge>(carJson),
    _ => throw new NotSupportedException($"不支持的车型类型:{carType}")
};

方案2:使用System.Text.Json原生多态支持(.NET 7及以上版本推荐)

框架原生支持多态序列化鉴别,无需手动处理类型判断逻辑:

  1. 给汽车基类添加多态特性标注
[JsonDerivedType(typeof(Ford), typeDiscriminator: nameof(Ford))]
[JsonDerivedType(typeof(Lexus), typeDiscriminator: nameof(Lexus))]
[JsonDerivedType(typeof(Dodge), typeDiscriminator: nameof(Dodge))]
public abstract class Car // 你的汽车基类
{
    // 原有类代码无需修改
}
  1. 序列化代码直接按基类序列化即可
var JSON_CAR = JsonSerializer.Serialize(CurrentCar, typeof(Car));
writer.Write(JSON_CAR);
  1. 反序列化直接按基类接收,框架自动匹配子类
CurrentCar = JsonSerializer.Deserialize<Car>(reader.ReadString());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:54:02