[英]Serialize class with array property including index of array elements
我有一堂課
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>
我怎樣才能做到這一點?
沒有魔術可以為您做到這一點。 要獲得該輸出的唯一方法是,如果您擁有一個看起來像這樣的對象結構。 例如:
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();
}
}
您可以在這個小提琴中看到您獲得了想要的輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.