C# Xml序列化:如何为SubmitToCustoms标签添加属性?
解决XmlSerializer生成带属性元素的问题
问题核心在于你当前的类结构把SubmissionType定义成了Header类的属性,但实际需求是让它成为SubmitToCustoms元素本身的属性。要实现这个效果,你需要把SubmitToCustoms从普通的string类型改成独立的类,让它既能存储文本值,又能携带属性。
修正后的类结构
// 根节点类 [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] [System.Xml.Serialization.XmlRootAttribute("CustomsMessage", Namespace = "", IsNullable = false)] public partial class CUSTOMMESSAGES { private CUSTOMMESSAGES_HEADER HEADER_FIELD; public CUSTOMMESSAGES_HEADER Header { get { return this.HEADER_FIELD; } set { this.HEADER_FIELD = value; } } } // Header类 [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] public partial class CUSTOMMESSAGES_HEADER { // 将原string类型替换为自定义类 private SubmitToCustomsElement submitToCustoms_Field; public SubmitToCustomsElement SubmitToCustoms { get { return this.submitToCustoms_Field; } set { this.submitToCustoms_Field = value; } } } // 专门承载SubmitToCustoms元素的类 public class SubmitToCustomsElement { // [XmlText]标记用于存储元素的文本内容 [System.Xml.Serialization.XmlText] public string Value { get; set; } // [XmlAttribute]标记用于定义元素的属性 [System.Xml.Serialization.XmlAttribute("SubmissionType")] public string SubmissionType { get; set; } }
修正后的XML生成方法
public string GeneralXML1() { CUSTOMMESSAGES CustomMessage = new CUSTOMMESSAGES(); CUSTOMMESSAGES_HEADER HEADER = new CUSTOMMESSAGES_HEADER(); // 实例化自定义元素类并赋值 HEADER.SubmitToCustoms = new SubmitToCustomsElement { Value = "Y", SubmissionType = "Original" }; CustomMessage.Header = HEADER; // 补充Header到根对象的赋值 string tmp = XmlExtension.Serialize<CUSTOMMESSAGES>(CustomMessage); return tmp; }
关键说明
- 自定义元素类:创建
SubmitToCustomsElement类是核心,通过[XmlText]标记文本内容、[XmlAttribute]标记属性,完美匹配你需要的XML结构。 - 根节点名称修正:将
CUSTOMMESSAGES类的XmlRootAttribute名称改为"CustomsMessage",确保生成的根节点名称符合预期。 - 对象赋值完整性:你原代码中遗漏了将
HEADER赋值给CustomMessage.Header的步骤,这会导致生成的XML缺失Header节点,修正后补充了这一关键操作。
修改后生成的XML会完全符合你的期望:
<CustomsMessage> <Header> <SubmitToCustoms SubmissionType="Original">Y</SubmitToCustoms> </Header> </CustomsMessage>
内容的提问来源于stack exchange,提问作者Du Vo Quoc
相关产品推荐
相关产品推荐

