[Edit: 28-June-2010] Prefer Xaml Serialisation over Xml serialisation. Here's a basic example of serialising (Yes that's right in this part of the world that's how its spelt), an object to Xml: [Edit: BTW you will need to add a reference to System.Runtime.Serialization in addition to the standard C# console app references). namespace XmlSerialisation { using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Xml.Serialization; using System.Xml; public class Program { public static void Main(string[] args) { var subject = new KeyValuePair<int, string>(21, "Full House Aces High"); var builder = new StringBuilder(); using (var writer = new StringWriter(builder)) { var serialiser = new XmlSerializer(typeof(KeyValuePair<int, string>)); builder.AppendLine(); builder.AppendLine("XmlSerializer:"); serialiser.Serialize(writer, subject); builder.AppendLine(); } using (var writer = new StringWriter(builder)) { using (var xmlWriter = new XmlTextWriter(writer)) { var wcfSerialiser = new System.Runtime.Serialization.DataContractSerializer(typeof(KeyValuePair<int, string>)); builder.AppendLine(); builder.AppendLine("WCF Serialisation:"); wcfSerialiser.WriteObject(xmlWriter, subject); builder.AppendLine(); } } Console.WriteLine(builder.ToString()); } } } Here's the output of the program: XmlSerializer: <?xml version="1.0" encoding="utf-16"?> <KeyValuePairOfInt32String xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" /> WCF Serialisation: <KeyValuePairOfintstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xml ns="http://schemas.datacontract.org/2004/07/System.Collections.Generic"><key>21< /key><value>Full House Aces High</value></KeyValuePairOfintstring> The DataContractSerializer looks at fields for its serialisation process, and will ignore the System.Xml.Serialization attributes. You also have a Json serialiser at your disposal too, see here for more info. [Edit 28-June-2010] Here's an example of Deserialisation: private static T SetUpSampleData<T>(string sampleDataFile) where T : class, new() { if (File.Exists(sampleDataFile)) { // var serialiser = new System.Xml.Serialization.XmlSerializer(typeof(MainWindowController)); var serialiser = new System.Runtime.Serialization.DataContractSerializer(typeof(MainWindowController)); using (var stream = new FileStream(sampleDataFile, FileMode.Open, FileAccess.Read)) { using (var reader = XmlReader.Create(stream)) { // var deserialisedObject = serialiser.Deserialize(reader); // XmlSerialiser var deserialisedObject = serialiser.ReadObject(reader); // WCF DataContract Serialiser return deserialisedObject as T; } } } return null; } |