Я использую C# и класс XmlSerialiser для создания xml из объектов DTO.Сериализовать узел с различными дочерними узлами из объектов DTO
Теперь я должен создать такой XML-текст:
<Order>
<OrderNo>123456</OrderNo>
<Positions>
<TextPosition>
<Text>This is Order No 123456</Text>
</TextPosition>
<ItemPosition>
<ItemId>14789</ItemId>
<ItemName>Product 1</ItemName>
</ItemPosition>
</TextPosition>
<ItemPosition>
<ItemId>456</ItemId>
<ItemName>Product 2</ItemName>
</ItemPosition>
<TextPosition>
<Text>Good bye</Text>
</TextPosition>
<SumPosition>
<Value>123.45 USD</Value>
</SumPosition>
</Positions>
</Order>
я использую атрибуты для украшения своих классов и все работает отлично. Одна вещь, которую я еще не мог решить. Мне нужно сгенерировать тег Positions
с другим тегом TextPosition, ItemPosition, ValuePosition, ...
внутри.
Как добиться этого в C#?
В настоящее время мой класс Order содержит
[XmlElement("Positions")]
public PositionList Positions { get; set; }
PositionList класс с
public class PositionList
{
[XmlElement("Positions")]
public List<Object> Positions { get; set; }
}
Для того, чтобы избежать InvalidOperationException я добавил
[XmlInclude(typeof(Textposition))]
[XmlInclude(typeof(ItemPosition))]
[XmlInclude(typeof(SumPosition))]
мой класс Order.
Однако, вместо генерации
<Positions>
<TextPosition>...</TextPosition>
</Positions>
сериализатор генерирует:
<Position d4p1:type="TextPosition" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">...</Position>
Дело в том, В не нужно десериализации это мой сам, но предоставить XML-файл в очень строгий формат для одного клиента. Есть ли способ достичь этого?
Удивительный! Я добавил вспомогательный класс PositionList с одним свойством 'public List Positions {get; set;}', чтобы получить дополнительный тег '' между порядком и позициями, но да, это сделало трюк.Большое спасибо. –
Без проблем, рад, что я мог бы помочь, извините, я пропустил лишний тег :) – SwDevMan81