从XML转换数组

Cha*_*IIC 1 c# xml xpath xml-serialization

我在我的文件中使用XML并想要序列化然后反序列化一个对象,我有些新手.该对象包含一对字符串,一个int,然后是两个int []数组.使用XmlSerializer进行序列化很好,生成的XML看起来像这样:

http://codepaste.net/x9x5ms

<?xml version="1.0" encoding="utf-16"?>
<Harvey xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>Carl</Name>
  <Ch>KNV</Ch>
  <Tn>40</Tn>
  <APoints>
    <int>8</int>
    <int>20</int>
    <int>16</int>
    <int>16</int>
    <int>12</int>
    <int>12</int>
    <int>16</int>
    <int>16</int>
    <int>4</int>
    <int>4</int>
    <int>4</int>
  </APoints>
  <SPoints>
    <int>3</int>
    <int>12</int>
    <int>10</int>
    <int>10</int>
    <int>6</int>
    <int>6</int>
    <int>10</int>
    <int>10</int>
  </SPoints>
</Harvey>
Run Code Online (Sandbox Code Playgroud)

问题是尝试将int []值加载回其数组中.我一直无法弄清楚如何告诉我想所有的Apoints加载到一个int []数组中的应用.我怀疑解决方案非常简单,但我一直无法弄清楚.

Nic*_*rey 8

一样容易

[XmlRoot( "Harvey" )]
public class Widget
{

    [XmlElement]
    public string Name { get ; set; }

    [XmlElement]
    public string Ch   { get ; set; }

    [XmlElement]
    public int    Tn   { get ; set; }

    [XmlArray("APoints")]
    [XmlArrayItem("int")]
    public int[] APoints { get ; set ; }

    [XmlArray("SPoints")]
    [XmlArrayItem("int")]
    public int[] SPoints { get ; set ; }

}

class Program
{
    public static T Rehydrate<T>( string xml )
    {
        T instance ;
        XmlSerializer serializer = new XmlSerializer( typeof(T) ) ;

        using ( TextReader tr = new StringReader( xml ) )
        {
            instance = (T) serializer.Deserialize( tr ) ;
        }
        return instance ;
    }


    static void Main( string[] args )
    {
        string xml = @"
<Harvey xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
  <Name>Carl</Name>
  <Ch>KNV</Ch>
  <Tn>40</Tn>
  <APoints>
    <int>8</int>
    <int>20</int>
    <int>16</int>
    <int>16</int>
    <int>12</int>
    <int>12</int>
    <int>16</int>
    <int>16</int>
    <int>4</int>
    <int>4</int>
    <int>4</int>
  </APoints>
  <SPoints>
    <int>3</int>
    <int>12</int>
    <int>10</int>
    <int>10</int>
    <int>6</int>
    <int>6</int>
    <int>10</int>
    <int>10</int>
  </SPoints>
</Harvey>
";
        Widget instance = Rehydrate<Widget>( xml ) ;

        return;
    }

}
Run Code Online (Sandbox Code Playgroud)