簡體   English   中英

C#XML序列化各種子項作為xml屬性

[英]C# XML-Serialization of various subitems in list as xml attributes

我正在嘗試創建一個通用的類結構,以將帶有各種子項的列表保存在xml文件中作為XML屬性。 每個子項目都有名稱(字符串)和值(雙精度)。

一個示例:兩個列表(框架1和框架2)的XML應該看起來像上面所示。 frame1是類rec的列表。 類rec始終包含多對參數及其值。 在frame1中,類rec包含參數car,factory和height。 並在frame2書和頁面中。

    <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[][] ,因此不需要任何泛型類型。

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM