Re: XMLSerialization
Craig Vermeer <[email protected]> Thu, 19 Jul 2007 10:30:21 -0400
| Newsgroups | gmane.comp.windows.devel.dotnet.cx |
|---|---|
| Message-ID | <[email protected]> |
Peter -
This doesn't really answer your question, but I thought I'd point out=20
that the SerializableAttribute you're using on the classes you want to=20
serialize isn't needed. XmlSerializer doesn't look at this attribute... =
it's a fairly common misconception, actually.
Thanks,
Craig
Peter Osucha wrote:
> 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.
>
> =20
>
> However, it doesn't seem to deserialize at all - I always get an error.=
>
> =20
>
> Perhaps someone can help me out here. The code for the project is
> below.
>
> =20
>
> 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..
>
> =20
>
> Peter
>
> =20
>
> =20
>
> //Class MyItem...
>
> using System;
>
> using System.Collections.Generic;
>
> using System.Text;
>
> using System.Drawing;
>
> =20
>
> namespace XMLSerializationTest
>
> {
>
> [Serializable]
>
> public class MyItem
>
> {
>
> private string _name;
>
> private int _number;
>
> =20
>
> public MyItem ( ) { }
>
> =20
>
> public MyItem ( string name, int number )
>
> {
>
> _name =3D name;
>
> _number =3D number;
>
> }
>
> =20
>
> public string Name
>
> {
>
> get { return _name; }
>
> set { _name =3D value; }
>
> }
>
> =20
>
> public int Number
>
> {
>
> get { return _number; }
>
> set { _number =3D value; }
>
> }
>
> }
>
> }
>
> =20
>
> =20
>
> // Class MyItemHolder
>
> using System;
>
> using System.Collections.Generic;
>
> using System.Text;
>
> =20
>
> namespace XMLSerializationTest
>
> {
>
> [Serializable]
>
> public class MyItemHolder
>
> {
>
> List<MyItem> _myItems =3D new List<MyItem> ( );
>
> private string _holderName =3D string.Empty;
>
> =20
>
> public MyItemHolder ( ) { }
>
> =20
>
> public string HolderName
>
> {
>
> get { return _holderName; }
>
> set { _holderName =3D value; }
>
> }
>
> =20
>
> public List<MyItem> MyItems
>
> {
>
> get { return _myItems; }
>
> set { _myItems =3D value; }
>
> }
>
> =20
>
> =20
>
> }
>
> }
>
> =20
>
> =20
>
> // 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;
>
> =20
>
> namespace XMLSerializationTest
>
> {
>
> public partial class Form1 : Form
>
> {
>
> private MyItemHolder _holder =3D new MyItemHolder ( );
>
> private MyItemHolder _holderRebuild;
>
> private System.Text.StringBuilder sbHolder =3D new StringBuilde=
r (
> );
>
> =20
>
> public Form1 ( )
>
> {
>
> InitializeComponent ( );
>
> =20
>
> _holder.HolderName =3D "PMO";
>
> for ( int i =3D 1; i < 3; i++ )
>
> {
>
> _holder.MyItems.Add ( new MyItem ( "Item..." +
> i.ToString ( ), i ) );
>
> }
>
> }
>
> =20
>
> private void button1_Click ( object sender, EventArgs e )
>
> {
>
> System.Xml.Serialization.XmlSerializer xser =3D new
> System.Xml.Serialization.XmlSerializer ( typeof ( MyItemHolder ) );
>
> =20
>
> sbHolder =3D new StringBuilder ( );
>
> System.IO.StringWriter sw =3D new System.IO.StringWriter (
> sbHolder );
>
> xser.Serialize ( sw, _holder );
>
> =20
>
> richTextBox1.Text =3D sbHolder.ToString ( );
>
> }
>
> =20
>
> private void button2_Click ( object sender, EventArgs e )
>
> {
>
> System.Xml.Serialization.XmlSerializer xser =3D new
> System.Xml.Serialization.XmlSerializer ( typeof ( List<MyItem> ) );
>
> System.IO.StringReader sr =3D new System.IO.StringReader (
> sbHolder.ToString ( ) );
>
> =20
>
> try
>
> {
>
> _holderRebuild =3D ( MyItemHolder )xser.Deserialize ( s=
r
> );
>
> richTextBox1.Text =3D string.Format ( "Name: {0}, Item
> count: {1}", _holderRebuild.HolderName,
> _holderRebuild.MyItems.Count.ToString ( ) );
>
> }
>
> catch ( Exception ex )
>
> {
>
> string errorText =3D ex.Message;
>
> if ( ex.InnerException !=3D null ) errorText =3D errorT=
ext +
> "(" + ex.InnerException.Message + ")";
>
> richTextBox1.Text =3D errorText;
>
> }
>
> =20
>
> }
>
> }
>
> }
>
> =20
>
> =20
>
>
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> This list is hosted by DevelopMentor=AE http://www.develop.com
>
> View archives and manage your subscription(s) at http://discuss.develop=
=2Ecom
> =20
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
This list is hosted by DevelopMentor=AE http://www.develop.com
View archives and manage your subscription(s) at http://discuss.develop.com