转自:http://www.devdiv.com/thread-56865-1-1.html
Currently I am looking for the best solution for object serialization in Windows Phone 7 environment. I will begin my quest with XML Serialization using XmlSerializer Class (popular solution in Silverlight). In this post I will show how to serialize and deserialize objects using XmlSerializer, later I will try to compare several ways of serialization to find out which one is the best.
Additional Information
Creating a sample class
I have created special SampleData class to be serialized and deserialized. It is a very simple class containing only two properties and a constructor declaration for filling down both properties (check code bellow). To control XML generation for a class you can use XmlAttribute, XmlElement, etc. Pay attention that only public properties can be serialized. More information about XML-generation can be foundhere andhere (MSDN website).
- public class SampleData
- {
- [XmlElement]
- public string ContentText { get; set; }
- [XmlElement]
- public List<int> SomeItems { get; set; }
- public SampleData()
- {
- ContentText = "some text";
- SomeItems = new List<int>() { 1, 2, 3 };
- }
- }

SerializationBoth serialization and deserialization processes are very easy to implement. For both operations you will need to create an instance of XmlSerializer class and pass it a type of object for serialization. In addition for serialization you will need a stream object to hold serialized object. To serialize an object simply call Serialize method of XmlSerializer instance. I have created the following method for serialization:
- public static void Serialize(Stream streamObject, object objForSerialization)
- {
- if (objForSerialization == null || streamObject == null)
- return;
- XmlSerializer serializer = new XmlSerializer(objForSerialization.GetType());
- serializer.Serialize(streamObject, objForSerialization);
- }
- Class for serialization must be public
- Class member for serialization must be public
- Parameterless constructor for a class
- public static object Deserialize(Stream streamObject, Type serializedObjectType)
- {
- if (serializedObjectType == null || streamObject == null)
- return null;
- XmlSerializer serializer = new XmlSerializer(serializedObjectType);
- return serializer.Deserialize(streamObject);
- }
- public static void TestXMLSerialization()
- {
- // serialization
- MemoryStream ms = new MemoryStream();
- XMLSerializerHelper.Serialize(ms, new SampleData());
- ms.Position = 0;
- // deserialization
- var sampleData = XMLSerializerHelper.Deserialize(ms, typeof(SampleData));
- ms.Close();
- }
- <?xml version="1.0"?>
- <SampleData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <ContentText>some text</ContentText>
- <SomeItems>1</SomeItems>
- <SomeItems>2</SomeItems>
- <SomeItems>3</SomeItems>
- </SampleData>