2015-04-06 108 views
0

小样本:反序列化到反序列化类中的列表中?

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

    <coordinate> 
    ... 
    </coordinate> 

    <coordinate> 
    ... 
    </coordinate> 

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

这将导致:

public class Head 
{ 
    public coordinate[] coordinates; 
} 

是否第一码样本结果的第二代码样品中的反序列化铸造对象的类型“头”后?

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

是否要添加反序列化代码? – dotnetom 2015-04-06 10:37:56

+0

这是一个相当大的项目,所以我只想100%确定可以反序列化到反序列化类中的数组。不幸的是,序列化是我在编程的几年中错过的东西。 – Solrik 2015-04-06 11:02:05

+0

@Solrik我的[回复](http://stackoverflow.com/a/29471671/468718)有帮助吗? – 2015-04-06 16:35:44

回答

0

你可以n按照以下方式反序列化给定的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

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