2011-09-24 155 views
3

我tryind反序列化XML文件轉換成對象[] - 對象是具有以下字段如何將xml反序列化爲對象數組?

矩形
public class Rectangle : IXmlSerializable 
{ 
    public string Id { get; set; } 
    public Point TopLeft { get; set; } 
    public Point BottomRight { get; set; } 
    public RgbColor Color { get; set; } 
} 

我創建幾個矩形,它們保存到一個數組並設法它們序列化到的XML我得到的語法如下:

<?xml version="1.0" encoding="utf-8" ?> 
- <Rectangles> 
- <Rectangle> 
    <ID>First one</ID> 
    - <TopLeft> 
    <X>0.06</X> 
    <Y>0.4</Y> 
    </TopLeft> 
    - <BottomRight> 
    <X>0.12</X> 
    <Y>0.13</Y> 
    </BottomRight> 
    - <RGB_Color> 
    <Blue>5</Blue> 
    <Red>205</Red> 
    <Green>60</Green> 
    </RGB_Color> 
    </Rectangle> 

-

現在我想反序列化對象的矩形返回到一個新的矩形[] 我應該怎麼辦呢?

XmlSerializer mySerializer = new XmlSerializer(typeof(Rectangle)); 
     FileStream myFileStream = new FileStream("rectangle.xml", FileMode.Open); 
     Rectangle[] r = new Rectangle[] {}; 
     Rectangle rec; 
     for (int i = 0; i < 3; i++) 
     { 
      r[i] = (Rectangle) mySerializer.Deserialize(myFileStream); 
     } 

我得到一個InvalidOperationException異常 - {「有是XML文檔(1,40)中的錯誤。」} 我到底做錯了什麼?

謝謝

+4

你的方形XML標籤沒有結束。這是一個錯字嗎? –

回答

1

你的XML缺少結束</Rectangles>元素。這可能是問題!

1

問題是關於根元素名稱。但是,Deserialize()只知道如何查找名爲Rectangles的元素。 但在你的情況元素名爲「矩形」。那就是所有的InvalidOperationException都在告訴你。

9

如果你的XML文檔是有效的,你應該能夠使用這個代碼反序列化:

XmlSerializer mySerializer = new XmlSerializer(typeof(Rectangle[]), new XmlRootAttribute("Rectangles")); 
    using (FileStream myFileStream = new FileStream("rectangle.xml", FileMode.Open)) 
    { 
    Rectangle[] r; 
    r = (Rectangle[]) mySerializer.Deserialize(myFileStream); 
    } 
+2

如果你將'FileStream'放入'using'塊中,那麼我會提高你的答案。 –