Re: XMLSerialization

Adam Sills <[email protected]> Wed, 18 Jul 2007 16:14:01 -0500
Newsgroups gmane.comp.windows.devel.dotnet.cx
Message-ID <[email protected]>
You're serializing MyItemHolder but attempting to deserialize List<MyItem>

button1_click
System.Xml.Serialization.XmlSerializer xser = new
System.Xml.Serialization.XmlSerializer ( typeof ( MyItemHolder ) );
button2_click
System.Xml.Serialization.XmlSerializer xser = new
System.Xml.Serialization.XmlSerializer ( typeof ( List<MyItem> ) );

Those need to be the same.

Adam..

-----Original Message-----
From: Discussion relating to the specifics of the C# and Managed C++
languages [mailto:[email protected]] On Behalf Of Peter Osucha
Sent: Wednesday, July 18, 2007 3:49 PM
To: [email protected]
Subject: [DOTNET-CX] XMLSerialization

I have been playing around with this again as a way to import/export
some objects.  It seems to work pretty well (I'm just marking the
classes as [Serializable] for now).  I have had no trouble serializing a
simple class as well as a simple List<>.  The I combined them so that I
had a simple class with a List<> in side of It and it still seems to
have serialized OK.



However, it doesn't seem to deserialize at all - I always get an error.



Perhaps someone can help me out here.  The code for the project is
below.



There is a class MyItem with two properties.  There is a class
MyItemHolder with a two properties, one being a List<MyItem>.  Then
there is a form with two buttons on it, one to serialize, the second to
deserialize and a richtextbox to show results..



Peter





//Class MyItem...

using System;

using System.Collections.Generic;

using System.Text;

using System.Drawing;



namespace XMLSerializationTest

{

    [Serializable]

    public class MyItem

    {

        private string _name;

        private int _number;



        public MyItem ( ) { }



        public MyItem ( string name, int number )

        {

            _name = name;

            _number = number;

        }



        public string Name

        {

            get { return _name; }

            set { _name = value; }

        }



        public int Number

        {

            get { return _number; }

            set { _number = value; }

        }

    }

}





// Class MyItemHolder

using System;

using System.Collections.Generic;

using System.Text;



namespace XMLSerializationTest

{

    [Serializable]

    public class MyItemHolder

    {

        List<MyItem> _myItems = new List<MyItem> ( );

        private string _holderName = string.Empty;



        public MyItemHolder ( ) { }



        public string HolderName

        {

            get { return _holderName; }

            set { _holderName = value; }

        }



        public List<MyItem> MyItems

        {

            get { return _myItems; }

            set { _myItems = value; }

        }





    }

}





// Form code (a richtext box to show results, button1 to serialize,
button2 to deserialize)

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Xml;

using System.Xml.Serialization;

using System.IO;



namespace XMLSerializationTest

{

    public partial class Form1 : Form

    {

        private MyItemHolder _holder = new MyItemHolder ( );

        private MyItemHolder _holderRebuild;

        private System.Text.StringBuilder sbHolder = new StringBuilder (
);



        public Form1 ( )

        {

            InitializeComponent ( );



            _holder.HolderName = "PMO";

            for ( int i = 1; i < 3; i++ )

            {

                _holder.MyItems.Add ( new MyItem ( "Item..." +
i.ToString ( ), i ) );

            }

        }



        private void button1_Click ( object sender, EventArgs e )

        {

            System.Xml.Serialization.XmlSerializer xser = new
System.Xml.Serialization.XmlSerializer ( typeof ( MyItemHolder ) );



            sbHolder = new StringBuilder ( );

            System.IO.StringWriter sw = new System.IO.StringWriter (
sbHolder );

            xser.Serialize ( sw, _holder );



            richTextBox1.Text = sbHolder.ToString ( );

        }



        private void button2_Click ( object sender, EventArgs e )

        {

            System.Xml.Serialization.XmlSerializer xser = new
System.Xml.Serialization.XmlSerializer ( typeof ( List<MyItem> ) );

            System.IO.StringReader sr = new System.IO.StringReader (
sbHolder.ToString ( ) );



            try

            {

                _holderRebuild = ( MyItemHolder )xser.Deserialize ( sr
);

                richTextBox1.Text = string.Format ( "Name: {0}, Item
count: {1}", _holderRebuild.HolderName,
_holderRebuild.MyItems.Count.ToString ( ) );

            }

            catch ( Exception ex )

            {

                string errorText = ex.Message;

                if ( ex.InnerException != null ) errorText = errorText +
"(" +  ex.InnerException.Message + ")";

                richTextBox1.Text = errorText;

            }



        }

    }

}






===================================
This list is hosted by DevelopMentor.  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

===================================
This list is hosted by DevelopMentorĀ®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com