[英]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.