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

C# XML转POCO:同一xsi:type被多元素复用的序列化问题

XML反序列化C# POCO类型冲突解决方案

核心思路

通过显式指定XML类型别名解决命名冲突,同时补全所有多态类型的[XmlInclude]声明,让序列化器能识别所有xsi:type对应的子类。

具体步骤

  • 给冲突类指定唯一XML类型名
    当Element类与SlotValue的子类命名冲突时,给Element添加[XmlType]属性并指定一个XML端唯一的别名,避免与子类的xsi:type值重复:

    [XmlType("ElementEntity")] // 自定义XML类型别名,和SlotValue子类的xsi:type区分开
    public class Element
    {
        // 原工具生成的类成员
        public AnyValueType AnyValue { get; set; }
    }
    
  • 补全所有多态类型的XmlInclude声明
    不仅在SlotValue的父类上添加[XmlInclude],还要在AnyValueType的父类(或包含AnyValue属性的类)上,添加所有可能的子类类型声明:

    [XmlInclude(typeof(StringAnyValue))]
    [XmlInclude(typeof(IntAnyValue))]
    // 其他AnyValueType的子类都要添加
    public class AnyValueType
    {
        // 类成员
    }
    
  • 修正工具生成的类的多态属性配置
    确保包含多态属性的字段/属性,配置正确的XmlElement属性,明确指定基类类型:

    public class ParentClass
    {
        [XmlElement(Type = typeof(AnyValueType))]
        public AnyValueType AnyValue { get; set; }
    }
    
  • 验证XML与C#类型的映射匹配
    检查XML中的xsi:type值是否与C#类的[XmlType]别名完全一致,比如XML中如果是xsi:type="ElementEntity",则对应C#的Element类的XmlType别名必须完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:01:21