私はc#とXmlSerialiserクラスを使用してDTOオブジェクトから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>
は、私は私のクラスを飾るために属性を使用して、すべてが正常に動作します。 まだ解決できなかったことが1つあります。別のタグTextPosition, ItemPosition, ValuePosition, ...
が入ったタグPositions
を生成する必要があります。
これをC#でどのように実現できますか?
現在、私のクラスの注文が
[XmlElement("Positions")]
public PositionList Positions { get; set; }
が含まれていPositionListは、私は私のOrderクラスに
[XmlInclude(typeof(Textposition))]
[XmlInclude(typeof(ItemPosition))]
[XmlInclude(typeof(SumPosition))]
を追加InvalidOperationExceptionがを避けるために
public class PositionList
{
[XmlElement("Positions")]
public List<Object> Positions { get; set; }
}
を持つクラスです。
しかし、シリアライザが生成代わり
<Positions>
<TextPosition>...</TextPosition>
</Positions>
を生成する:
<Position d4p1:type="TextPosition" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">...</Position>
事があり、中にはそれを私の自己をデシリアライズが、非常にXMLファイルを提供する必要はありません1人の顧客の厳格なフォーマット。これを実現する方法はありますか?
恐ろしい!私は、1つのプロパティ 'public list Positions {get; set;}'でヘルパークラスPositionListを追加して、注文と位置の間に余分な ''タグを付けました。どうもありがとうございました。 –
問題はありません、私が助けることができてうれしい、余分なタグを忘れて申し訳ありません:) – SwDevMan81