2017-09-13 3 views
0

xmlファイル内のさまざまなサブアイテムを持つリストをXML属性として保存するための汎用クラス構造を作成しようとしています。各サブアイテムにはName(文字列)とValue(ダブル)があります。C#XML - xml属性としてリスト内のさまざまなサブアイテムのシリアライズ

例: 2つのリスト(フレーム1とフレーム2)のXMLは、上記のようになります。 frame1はクラスrecのListです。クラスrecには、常に複数のパラメータとその値のペアが含まれます。フレーム1では、クラスrecにはcar、factory、heightの各パラメータが含まれています。そして、フレーム2の本とページ。

<frame1> 
     <rec car="0" factory="1" height="2" /> 
     <rec car="1" factory="4" height="2" /> 
     <rec car="2" factory="4" height="3" /> 
     <rec car="3" factory="5" height="2" /> 
    </frame1> 
    <frame2> 
     <rec book="0" page="1" /> 
     <rec book="1" page="4" /> 
     <rec book="2" page="4" /> 
     <rec book="3" page="5" /> 
    </frame2> 

これはほんの一例です。私はそれぞれの "フレーム"リストごとに異なるプロパティを持つ異なるクラスを作成したくありません。サブアイテムが常に変化しているので、私はあるクラス "rec"でこの問題を解決したい。これを作成する方法はありますか? listsが必要なジェネリック型object[][]あり、そうではない:

は、私はあなたがこのようなコードを使用することができると思い、事前

+0

回答は、あなたがそのXMLを使用しようとしている方法によって異なります。そのような構造体(手動で作成することができます)(https://stackoverflow.com/q/284324/1997232)... – Sinatr

+0

両方の場合でC#で同じ 'rec'クラスですか? –

+0

recクラス属性にはDictionary を使用します。 – jdweng

答えて

0

でいただきありがとうございます。

using System.Xml.Linq; 

... 

var lists = new[] 
       { 
        new object[] 
         { 
          new ClassA("0", "1", "2"), new ClassA("1", "4", "2"), new ClassA("2", "4", "3"), 
          new ClassA("3", "5", "2"), 
         }, 
        new object[] 
         { 
          new ClassB("0", "1"), new ClassB("1", "4"), new ClassB("2", "4"), 
          new ClassB("3", "5"), 
         } 
       }; 

var xml = new XDocument(new XElement("Root")); 
for (var i = 0; i < lists.Length; i++) 
{ 
    var eFrame = new XElement($"frame{i}"); 
    var list = lists[i]; 
    foreach (var obj in list) 
    { 
     var eRec = new XElement("rec"); 
     var props = obj.GetType().GetProperties(); 
     foreach (var prop in props) 
     { 
      eRec.SetAttributeValue(prop.Name, prop.GetValue(obj).ToString()); 
     } 

     eFrame.Add(eRec); 
    } 

    xml.Root.Add(eFrame); 
} 

結果はxmlオブジェクトとしてこのようなものになります。

<Root> 
    <frame0> 
    <rec car="0" factory="1" height="2" /> 
    <rec car="1" factory="4" height="2" /> 
    <rec car="2" factory="4" height="3" /> 
    <rec car="3" factory="5" height="2" /> 
    </frame0> 
    <frame1> 
    <rec book="0" page="1" /> 
    <rec book="1" page="4" /> 
    <rec book="2" page="4" /> 
    <rec book="3" page="5" /> 
    </frame1> 
</Root> 
関連する問題