我正在编写一个c#项目,我正在尝试反序列化具有int []类型字段的对象,并且我想以另一种方式进行反序列化。
说我有课:
class Player
{
public string Name;
public int[] Spells;
}
一个xml文件,我从中反序列化类Player的实例:
<Player>
<Name>John</Name>
<Spells>
<int>1</int>
<int>5</int>
<int>9</int>
</Spells>
</Player>
事情是我不希望xml文件看起来像那样,我希望它更像是这样:
<Player>
<Name>John</Name>
<Spells>1 5 9</Spells>
</Player>
我正在使用XmlSerializer,它只在第一次读取xml时才反序列化字段Spells。我想知道它是否像一个简单字段一样反序列化一个int数组。
答案 0 :(得分:7)
其中一种方法是创建另一个属性,该属性将空间分隔集用于序列化目的。例如,
class Player
{
public string Name;
[XmlIgnore]
public int[] Spells;
[XmlElement("Spells")
public string SpellsString
{
get
{
// array to space delimited string
}
set
{
// string to array conversion
}
}
}
答案 1 :(得分:2)
class Player
{
public string Name { get; set; }
public string SpellData { get; set; }
public int[] Spells() {
return SpellData.Split(" ").select(n=>int.parse(n)).ToArray();
};
}
这样的东西会使你的xml数据看起来像你想要的那样,因为在字符串上而不是函数会被序列化。但为什么你关心你的xml是什么样的?另一个xml更清洁。
答案 2 :(得分:1)
如果将法术存储在XML中以空格分隔的字符串中,则可以使用以下代码将其转换为整数列表:
var spellsAsIntegers =
spellsAsString.Split(' ').Select(n => int.Parse(n)).ToList();