.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
相关产品推荐
相关产品推荐

