С# настраиваемая сериализация xml, не включайте имя списка вложенных классов в теги xml

В .NET Coew 3.1 я пытаюсь создать файл XML следующего класса, но без отображения тега заказов в файле XML, что означает, что у меня есть корневой тег, а не только список элементов.

[XmlRoot("data")]
public class PurchaseOrder
{
    [XmlElement("orders")]
    public Item [] ItemsOrders;
}
[XmlRoot("item")]
public class Item
{
    [XmlElement("itemid")]
    public string ItemID;
    [XmlElement("price")]
    public decimal ItemPrice;
}

приведет к

<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <orders>
        <item>
            <itemid>aaa111</itemid>
            <ItemPrice>34.22</ItemPrice>
        </item>
        <item>
            <itemid>bbb222</itemid>
            <price>2.89</price>
        </item>
    </orders>
</data>

но мне нужно удалить тег orders. Результат, который мне нужно произвести,

<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <item>
        <itemid>aaa111</itemid>
        <ItemPrice>34.22</ItemPrice>
    </item>
    <item>
        <itemid>bbb222</itemid>
        <price>2.89</price>
    </item>
</data>

person Sugafree    schedule 31.05.2020    source источник
comment
То, что вы опубликовали как фактический результат, неверно. У вас есть [XmlElement(orders)] public Item [] ItemsOrders; У вас должен быть [XmlElement(item)] public Item [] ItemsOrders; В текущем коде не было бы и заказов, и предметов. Вместо этого в текущем коде не было бы заказов, а теги элементов были бы заказами. Использование XmlElement с массивом создает только один тег xml, тогда как ваш код показывает два тега.   -  person jdweng    schedule 31.05.2020


Ответы (1)


Лучший способ получить нужные классы — скопировать нужный XML в буфер обмена, а затем (в VS2019) отредактировать/вставить специальные/вставить классы как XML.

Это создаст правильные классы для предоставленного вами XML.

person Neil    schedule 31.05.2020