【问题标题】:Deserialize int arrays from XML file从 XML 文件反序列化 int 数组
【发布时间】:2011-08-07 19:36:06
【问题描述】:

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

标签: c# xml serialization xml-serialization deserialization


【解决方案1】:

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

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

【讨论】:

    【解决方案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 看起来像这样,因为在我的项目中,我读取了地图的碰撞层,并且查看由空格而不是 "" 分隔的矩阵元素要好得多。
    【解决方案3】:

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

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

    【讨论】:

    • 谢谢,这就是我要找的!
    猜你喜欢
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多