XMLSerialization
Peter Osucha <[email protected]> Wed, 18 Jul 2007 16:48:43 -0400
| Newsgroups | gmane.comp.windows.devel.dotnet.cx |
|---|---|
| Message-ID | <[email protected]> |
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 StringBuilder =
(
);
=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 ( sr
);
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 =
errorText +
"(" + 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.com