2015-04-06 204 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 { }