繁体   English   中英

关于C#语言中XML序列化的Arrayname

[英]Arrayname about XML serialization in C# language

[XmlRootAttribute("Order",IsNullable = false)]    
public class Order
{
    [XmlAttribute("pay_method")]
    public string paymethod { get; set; }

    [XmlAttribute("name")]
    public string custid { get; set; }

    [XmlArray("")]
    [XmlArrayItem("Cargo", IsNullable = false)]
    public Cargo[] Cargos { get; set; }

    [XmlArray("")]
    [XmlArrayItem("AddedService", IsNullable = false)]
    public AddedService[] AddedServices { get; set; }
}

XmlSerializer xs = new XmlSerializer();
var requeststring = xs.Serialize(request);

当我运行这个函数时,在结果中我总是像这样得到<Cargos>

<Order pay_method="" custid="">
    <Cargos>
    <Cargo name=""/>
    <Cargo name=""/>
    </Cargos>
    <AddedServices>
        <AddedService name=""/>
        <AddedService name=""/>
    </AddedServices>
</Order>

我只想在没有<Cargos></Cargos></AddedServices><AddedServices>情况下获得结果,例如:

<Order pay_method="" custid="">
    <Cargo name=""/>
    <Cargo name=""/>
    <AddedService name=""/>
    <AddedService name=""/>
</Order>

如何配置两者:

public Cargo[] Cargos { get; set; } 

public AddedService[] AddedServices { get; set; }

你不应该使用[XmlArrayItem] ,但使用[XmlElement(ElementName = "...")]

这应符合您预期的XML:

[XmlRoot(ElementName = "Cargo")]
public class Cargo
{
    [XmlAttribute(AttributeName = "name")]
    public string Name { get; set; }
}

[XmlRoot(ElementName = "AddedService")]
public class AddedService
{
    [XmlAttribute(AttributeName = "name")]
    public string Name { get; set; }
}

[XmlRoot(ElementName = "Order")]
public class Order
{
    [XmlElement(ElementName = "Cargo")]
    public List<Cargo> Cargo { get; set; }
    [XmlElement(ElementName = "AddedService")]
    public List<AddedService> AddedService { get; set; }
    [XmlAttribute(AttributeName = "pay_method")]
    public string Pay_method { get; set; }
    [XmlAttribute(AttributeName = "custid")]
    public string Custid { get; set; }
}

编辑:刚尝试过(它有效):

class Program
{
    static void Main(string[] args)
    {
        XmlSerializer xsSubmit = new XmlSerializer(typeof(Order));
        var subReq = new Order { Cargo  = new List<Cargo>{new Cargo { Name = "test" }, new Cargo { Name = "foo" }}, AddedService = new List<AddedService>{new AddedService{Name="addedService"}}, Custid = "custId", Pay_method = "bla"};
        var xml = "";

        using (var sww = new StringWriter())
        {
            using (XmlWriter writer = XmlWriter.Create(sww))
            {
                xsSubmit.Serialize(writer, subReq);
                xml = sww.ToString(); // Your XML
            }
        }
    }
}

输出( xml -variable):

<Order pay_method="bla" custid="custId">
    <Cargo name="test" />
    <Cargo name="foo" />
    <AddedService name="addedService" />
</Order>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM