我有一个班级
public class clsTest
{
public string name;
[XmlArray(ElementName = "values")]
[XmlArrayItem(ElementName = "value")]
public float[] values;
public clsTest()
{
name = "name-test";
values = new float[4];
values[0] = 0.9F;
values[1] = 1.1F;
values[2] = 2.2F;
values[3] = 3.3F;
}
}
当我序列化课程时,我得到了:
<clsTest>
<name>name-test</name>
<values>
<value>0.9</value>
<value>1.1</value>
<value>2.2</value>
<value>3.3</value>
</values>
</clsTest>
我想序列化类,并在XML输出中将数组索引作为Attribute。我想要这样的东西:
<clsTest>
<name>name-test</name>
<values>
<value index="0">0.9</value>
<value index="1">1.1</value>
<value index="2">2.2</value>
<value index="3">3.3</value>
</values>
</clsTest>
我怎么能实现这个目标?
答案 0 :(得分:0)
没有魔法可以为你做到这一点。如果您有一个看起来像这样的对象结构,那么您获得该输出的唯一方法就是如此。例如:
public class ClsTest
{
[XmlElement("name")]
public string Name { get; set; }
[XmlArray("values")]
[XmlArrayItem("value")]
public IndexedFloat[] Values { get; set; }
}
public class IndexedFloat
{
[XmlAttribute("index")]
public int Index { get; set; }
[XmlText]
public float Value { get; set; }
}
您可以添加另一个属性,以便轻松获取和设置原始float
值:
[XmlIgnore]
public IEnumerable<float> ValuesRaw
{
get { return Values.Select(x => x.Value); }
set
{
Values = value
.Select((x, i) => new IndexedFloat {Index = i, Value = x})
.ToArray();
}
}
您可以在this fiddle中看到您获得了所需的输出。