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

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;
}

关键说明

  1. 自定义元素类:创建SubmitToCustomsElement类是核心,通过[XmlText]标记文本内容、[XmlAttribute]标记属性,完美匹配你需要的XML结构。
  2. 根节点名称修正:将CUSTOMMESSAGES类的XmlRootAttribute名称改为"CustomsMessage",确保生成的根节点名称符合预期。
  3. 对象赋值完整性:你原代码中遗漏了将HEADER赋值给CustomMessage.Header的步骤,这会导致生成的XML缺失Header节点,修正后补充了这一关键操作。

修改后生成的XML会完全符合你的期望:

<CustomsMessage>
  <Header>
    <SubmitToCustoms SubmissionType="Original">Y</SubmitToCustoms>
  </Header>
</CustomsMessage>

内容的提问来源于stack exchange,提问作者Du Vo Quoc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 07:47:39