反序列化到反序列化类中的列表?

时间:2015-04-06 10:32:22

标签: c# arrays xml deserialization

小样本:

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

    <coordinate>
    ...
    </coordinate>

    <coordinate>
    ...
    </coordinate>

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

这应该导致:

public class Head
{
    public coordinate[] coordinates;
}

第一个代码示例的反序列化是否会在将对象转换为类型&#34; Head&#34;之后导致第二个代码示例。 ?

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();
}

2 个答案:

答案 0 :(得分:0)

班级的序列化

public class Head
{
   public coordinate[] coordinates;
}

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

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

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

答案 1 :(得分:0)

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

您的示例XML:

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

    <coordinate>
    ...
    </coordinate>

    <coordinate>
    ...
    </coordinate>

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

模特课程:

[XmlElement(ElementName = "head")]
public class Head
{
    [XmlElement(ElementName = "coordinate")]
    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();
}

我所做的是用coordinates属性装饰[XmlElement]属性。因此,您只需要修改上面的Model类,即可正确映射给定的xml示例。您可以在msdn。

的以下参考链接中找到更多示例

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