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

.NET Core/C# 如何定义XML头适配第三方系统反序列化要求

问题原因

你遇到的是.NET XML序列化的默认规则问题:

  • [XmlType] 定义的类名仅在两种场景下直接作为序列化节点名:类是XML根节点、类是集合类型的子元素
  • 如果类作为另一个类的普通属性成员,序列化默认用属性的字段名作为节点名,忽略类的[XmlType]配置

这正好对应你现在的现象:根节点PostShipmentNotes用了XmlType值,MerchandiseLine是集合子元素所以用了XmlType值,中间的ShipmentNoteBD、ShipmentDetailsBD都是上层类的属性,所以用了属性本身的名字,配置未生效。

解决方法

最常用的方案是给上层类的对应属性加[XmlElement]显式指定节点名,参考代码结构如下:

// 根节点推荐用[XmlRoot]显式声明,兼容性更好
[XmlRoot("PostShipmentNotes")]
public class PostShipmentNotesBD
{
    // 显式指定该属性序列化后的节点名
    [XmlElement("ShipmentNote")]
    public ShipmentNoteBD ShipmentNoteBD { get; set; }
}

public class ShipmentNoteBD
{
    [XmlElement("ShipmentHeader")]
    public ShipmentHeader ShipmentHeader { get; set; }

    [XmlElement("ShipmentDetails")]
    public ShipmentDetailsBD ShipmentDetailsBD { get; set; }
}

public class ShipmentDetailsBD
{
    // 如果MerchandiseLine是集合,也可以用[XmlArray] + [XmlArrayItem] 按需配置
    [XmlElement("MerchandiseLine")]
    public List<MerchandiseLineBD> MerchandiseLines { get; set; }
}

// 剩下的类保持你现有的[XmlType]配置即可

修改后生成的XML就会符合要求,中间节点会替换成你指定的名称。

内容的提问来源于stack exchange,提问作者mcr.netcore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:24:05