2012-03-31 18 views
3

として、配列の配列をシリアライズは、私は、フィールドを持つ単一のXML要素

<Fields> 
    <Field x="0" y="0"> 
     ... 
    </Field> 
    <Field x="0" y="1"> 
     ... 
    </Field> 
    ... 
</Fields> 

残念ながら、C#のXmlSerializerは私に

<Fields> 
    <ArrayOfField> 
     .... some fields here 
    </ArrayOfField> 
    <ArrayOfField> 
     .... some here 
    </ArrayOfField> 
      ... 
</Fields> 
を与えます

これはどのように達成するのですか?


実際、配列の配列に固執する必要はありません。フィールドは2D空間を表現するので、自然な選択でした。 Dictionary私は必要な方法をシリアル化するだろうか?

+0

あなたは私たちに言うことができます。あなたはxsltを使ってあなたのxmlを変換することができました。 – naveen

+0

私はすべての詳細を与えませんでした.xとyは 'Field'クラスのパブリックフィールドであり、属性にマップされています。 'Field'クラスは大丈夫です。私はちょうど2D配列、配列の配列、またはギザギザの配列をシリアル化する方法を見つけることができません。 – emesx

答えて

2

あなたは、配列の配列と単一のアレイとの間の変換プロパティを作成することができます。このxとy属性が読み込まれる場合

using System.Linq; 

... 

[XmlIgnore] 
public Field[][] Fields; 

[XmlArray("Fields")] 
public Field[] SerializedFields 
{ 
    get 
    { 
     return this.Fields.SelectMany(fields => fields).ToArray(); 
    } 
    set 
    { 
     this.Fields = new Field[value.Max(field => field.x) + 1][]; 
     for (int x = 0; x < this.Fields.Length; x++) 
     { 
      this.Fields[x] = value.Where(field => field.x == x).ToArray(); 
     } 
    } 
} 
+0

私はこれについて考えましたが、どうすればそれを非直列化しますか? – emesx

+2

私の更新された回答を参照してください。 'x'と' y'プロパティは配列のインデックスと一致します。 'x'にギャップがあるかもしれません。 '' Fields [9] [3] 'が存在する場合には' 'Fields [9] [0]' 'Fields [9] [1] ] '、' Fields [9] [2] ');各配列の終わりに未使用の要素をドロップすることはOKです。 –

+0

**素晴らしい**私が必要とするものを正確に。 – emesx

関連する問題