Я использую c # и класс XmlSerialiser для создания xml из объектов 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))]
к моему классу заказа.
Однако вместо генерации
<Positions>
<TextPosition>...</TextPosition>
</Positions>
сериализатор генерирует:
<Position d4p1:type="TextPosition" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">...</Position>
Дело в том, что мне не нужно десериализовать его самому, но нужно предоставить XML-файл в очень строгом формате для одного клиента. Есть ли способ достичь этого?