从XML文件中反序列化整型数组

5
我正在编写一个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数组。 - Jodrell
3个回答

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
     }
   }
}

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更加干净。


我希望XML看起来像这样,因为在我的项目中,我读取地图的碰撞层,用空格分隔矩阵元素比使用“<int>”更好。 - Stefan

1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接