gpt4 book ai didi

c# - 使用包含数组元素索引的数组属性序列化类

转载 作者:太空宇宙 更新时间:2023-11-03 15:03:13 26 4
gpt4 key购买 nike

我有课

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 输出中将数组索引作为属性。我想要这样的东西:

<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();
}
}

可以在this fiddle中看到你得到你想要的输出。

关于c# - 使用包含数组元素索引的数组属性序列化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45057676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com