从XML文件反序列化int数组

本文关键字:int 数组 反序列化 文件 XML | 更新日期: 2023-09-27 17:50:22

我正在写一个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数组的方法。

从XML文件反序列化int数组

其中一种方法可以是创建另一个属性,该属性将使用空格分隔集进行序列化。例如,

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
     }
   }
}
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要干净得多。

如果将拼写存储在XML中以空格分隔的字符串中,则可以使用以下代码将其转换为整数列表:

var spellsAsIntegers = 
spellsAsString.Split(' ').Select(n => int.Parse(n)).ToList();