在C#中创建正确的XML的问题

时间:2018-02-07 10:37:27

标签: c# xml xml-serialization

我在REST Web服务中生成XML时遇到了问题。正在为数组类型的元素创建根元素。我想要一个Array元素的扁平结构,并且根节点不能进入输出。

需要创建XML

<RootOrderStatus xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <Envelope>
        <FunctionalAcknowledgment i:nil="true" />
        <Header>
            <Currency>US</Currency>
            <Language>En-U</Language>
            <Vendor i:nil="true" />
        </Header>
    </Envelope>
<Envelope>
        <FunctionalAcknowledgment i:nil="true" />
        <Header>
            <Currency>US</Currency>
            <Language>En-U</Language>
            <Vendor i:nil="true" />
        </Header>
    </Envelope>

生成的XML是

<RootOrderStatus xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Envelope>
    <RootOrderStatusEnvelope>
        <FunctionalAcknowledgment i:nil="true" />
        <Header>
            <Currency>US</Currency>
            <Language>En-U</Language>
            <Vendor i:nil="true" />
        </Header>
    </RootOrderStatusEnvelope>
<RootOrderStatusEnvelope>
        <FunctionalAcknowledgment i:nil="true" />
        <Header>
            <Currency>US</Currency>
            <Language>En-U</Language>
            <Vendor i:nil="true" />
        </Header>
    </RootOrderStatusEnvelope>
</Envelope>

类对象结构是

  /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public partial class RootOrderStatus
    {

        private RootOrderStatusEnvelope[] envelopeField;

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("Envelope")]
        public RootOrderStatusEnvelope[] Envelope
        {
            get
            {
                return this.envelopeField;
            }
            set
            {
                this.envelopeField = value;
            }
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class RootOrderStatusEnvelope
    {

        private object functionalAcknowledgmentField;

        private RootOrderStatusEnvelopeHeader headerField;

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
        public object FunctionalAcknowledgment
        {
            get
            {
                return this.functionalAcknowledgmentField;
            }
            set
            {
                this.functionalAcknowledgmentField = value;
            }
        }

        /// <remarks/>
        public RootOrderStatusEnvelopeHeader Header
        {
            get
            {
                return this.headerField;
            }
            set
            {
                this.headerField = value;
            }
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class RootOrderStatusEnvelopeHeader
    {

        private string currencyField;

        private string languageField;

        private object vendorField;

        /// <remarks/>
        public string Currency
        {
            get
            {
                return this.currencyField;
            }
            set
            {
                this.currencyField = value;
            }
        }

        /// <remarks/>
        public string Language
        {
            get
            {
                return this.languageField;
            }
            set
            {
                this.languageField = value;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
        public object Vendor
        {
            get
            {
                return this.vendorField;
            }
            set
            {
                this.vendorField = value;
            }
        }
    }

使用PASTE XML作为Visual Studio的CLASS功能创建类对象结构。

1 个答案:

答案 0 :(得分:0)

首先:您发布的XML在结尾处缺少结束标记</RootOrderStatus>。添加该标记后,使用“粘贴为XML”功能可能会获得更好的结果。

其次,您可以尝试的另一个选项是使用此网站生成的C#代码:http://xmltocsharp.azurewebsites.net/