反序列化成列表里面的反序列化class?

Deserialize into a list inside the deserialized class?

小样本:

<head>
    <coordinate>
    ...
    </coordinate>

    <coordinate>
    ...
    </coordinate>

    <coordinate>
    ...
    </coordinate>

    <coordinate>
    ...
    </coordinate>
    etc.
</head>

这应该导致:

public class Head
{
    public coordinate[] coordinates;
}

在将对象转换为 "Head" 类型后,第一个代码示例的反序列化是否会生成第二个代码示例?

public static void Main(string[] args)
{
    XmlSerializer deserializer = new XmlSerializer(typeof(Head));
    TextReader reader = new StreamReader("file.xml");
    Head obj = (Head)deserializer.Deserialize(reader);
    reader.Close();
}

class

的序列化
public class Head
{
   public coordinate[] coordinates;
}

<Head>
  <coordinates>
     <coordinate />
     <coordinate />
     ...
  </coordinates>     
</Head>

但是,如果您想将示例 1 反序列化为 class,您可以使用此 class 模板:

    [XmlRoot(ElementName = "head")]
    public class Head
    {
        [XmlElement]
        public coordinate coordinates { get; set; }
    }
    public class coordinate { }

您可以通过以下方式反序列化给定的 xml,具有 coordinate xml 元素的扁平序列。

你的样本XML:

<head>
    <coordinate>
    ...
    </coordinate>

    <coordinate>
    ...
    </coordinate>

    <coordinate>
    ...
    </coordinate>

    <coordinate>
    ...
    </coordinate>
    etc.
</head>

型号Class:

[XmlElement(ElementName = "head")]
public class Head
{
    [XmlElement(ElementName = "coordinate")]
    public coordinate[] coordinates;
}

使用上述模型 class 反序列化为 Head 应该可以使用您的以下代码..

public static void Main(string[] args)
{
    XmlSerializer deserializer = new XmlSerializer(typeof(Head));
    TextReader reader = new StreamReader("file.xml");
    Head obj = (Head)deserializer.Deserialize(reader);
    reader.Close();
}

我所做的是用 [XmlElement] 属性装饰 coordinates 属性。所以你只需要像上面那样修改你的模型 class 以正确映射给定的 xml 样本。您可以在下面的 msdn 参考 link 中找到更多示例。

参考:MSDN - Serializing an Array as a Sequence of Elements