3

내가 객체 []로 XML 파일을 역 직렬화하는 tryind입니다 - 객체에는 다음 필드가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이 모두 당신에게 알려줍니다. 당신의 XML 문서가 유효하면

9

, 당신은 그것을 역 직렬화하기 위해이 코드를 사용할 수 있어야합니다 :

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' 블록에 넣으면 답을 upvote 할 것입니다. –