从XML文件反序列化int数组

时间:2011-04-18 11:36:01

标签: c# xml serialization xml-serialization deserialization

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

3 个答案:

答案 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();