3

I am tryind to deserialize a xml file into an object[] - the object is a rectangle with the following fields

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

I created several rectangles, saved them into an array and managed to serialize them into the xml i get the following syntax:

<?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>

-

Now i want to deserialize the rectangle objects back into a new rectangle[] how should i do it?

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

i get a InvalidOperationException - {"There is an error in XML document (1, 40)."} what am i doing wrong?

Thank you

1
  • 4
    Your Rectangles xml tag is not ended. Is this a typo? Commented Sep 24, 2011 at 21:04

3 Answers 3

9

If your XML document is valid, you should be able to use this codes to deserialize it:

  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 );
  }
Sign up to request clarification or add additional context in comments.

1 Comment

If you'll put your FileStream into a using block, then I'll upvote your answer.
1

Your XML is missing a closing </Rectangles> element. That might be the problem!

Comments

1

The problem is about root element name.

However, Deserialize( ) only knows how to look for an element named Rectangles. But in your case element named "Rectangle". that is all the InvalidOperationException is telling you.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.