簡體   English   中英

使用數組屬性(包括數組元素的索引)序列化類

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

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