2011-10-25 6 views
0

これについての情報はありませんでした。デシリアライズ後にXmlElementAttributeの名前を取得します

  1. ことができます。私は2つの質問がある

    [XmlRoot("content")] 
    public class Content 
    { 
        [XmlElement] 
        public List<Item> Fields { get; set; } 
    } 
    
    public class Item 
    { 
    
        [XmlElement] 
        public List<Item> Fields { get; set; } 
    
        [XmlText] 
        public String Value { get; set; } 
    } 
    

    :私はこのようなクラスを使用して、それをデシリアライズしよう

    <content> 
        <field1>value</field1> 
        <field2> 
        <field3>value</field3> 
        </field2> 
    </content> 
    

    私は(便宜上単純化)XMLを持っています私はフィールドの実際の名前を取得? Itemクラスの[XmlName] string name;のように?クラス自体のための何らかの属性ですか?何らかの理由でノード名を "field"に設定して "type"属性を追加することはできません;-)実際のクラスとシリアライゼーションのプロセスは本当に複雑ですが、私は自分のシリアライザを実装したくないです。

  2. [XmlElement( "field *")]のようなワイルドカードを追加できますか?私は最初の質問に対する答えを知るまで、私はそれをテストすることができないので、より良い選択肢があれば、それもよく知りたいです。

ありがとう。

+0

任意のXMLを表す構造を作成しようとしているようです。その場合、なぜXMLシリアル化を使用しているのですか? LINQ to XMLを使用する方が適しているかもしれません。 – svick

+0

まあ、そうです、それはかなり任意の構造です。ポイントは、私はすでに多くの場合XMLシリアル化を使用していたので、私はこのコンベンションをプロジェクト全体に残したいと思っています(今まで可能でした...)。もちろん、解決策が見つからない場合は、LINQ ..に切り替えます。 –

答えて

0

ここでの唯一の答えは、残念ながら、不可能なことです。

結果として、私たちは独自のシリアル化ルーチンを作成しました。

1

あなたは属性

[XmlAttribute("FieldAsAttribute")] 

のコンストラクタに一致するXMLベースの要素の名前や属性を設定することができます - >シリアライズされます/ XML属性にプロパティをデシリアライズFieldAsAttribute または

[XmlElement("FieldAsElement")] 

- > XML要素FieldAsElement

にプロパティをデシリアライズ/シリアライズされます
+0

このような名前の要素だけをシリアル化/逆シリアル化します。私は上記の@svickのように、任意のXML構造を非直列化する必要があります。 –

+0

よろしくお願いします... – fixagon

関連する問題