1.准备要序列化的对象
[Serializable()] public class SerializableType { public string StringValue { get; set; } public bool BoolValue { get; set; } public int IntValue { get; set; } public AnotherType AnotherTypeValue { get; set; } public List<string> ListValue { get; set; } [NonSerialized()] private int ignoredField = 1; public SerializableType() { ListValue = new List<string>(); AnotherTypeValue = new AnotherType(); } }; [Serializable()] public class AnotherType { public string StringValue { get; set; } public int IntValue { get; set; } };
2.序列化
static void Serialize(SerializableType instance) { XmlSerializer serializer = new XmlSerializer(typeof(SerializableType)); using (StreamWriter streamWriter = File.CreateText("CSXmlSerialization.xml")) { serializer.Serialize(streamWriter, instance); } }
3. 解序列化
static SerializableType Deserialize() { var deserializedInstance = new SerializableType(); var serializer = new XmlSerializer(typeof(SerializableType)); using (StreamReader streamReader = File.OpenText("CSXmlSerialization.xml")) { deserializedInstance = serializer.Deserialize(streamReader) as SerializableType; } return deserializedInstance; }
4. 测试代码
static void Main(string[] args) { SerializableType st = new SerializableType(); st.BoolValue = true; st.IntValue = 1; st.StringValue = "Test String"; st.ListValue.Add("List Item 1"); st.ListValue.Add("List Item 2"); st.ListValue.Add("List Item 3"); st.AnotherTypeValue.IntValue = 2; st.AnotherTypeValue.StringValue = "Inner Test String"; Serialize(st); var dt = Deserialize(); Console.WriteLine("BoolValue: {0}", dt.BoolValue); Console.WriteLine("IntValue: {0}", dt.IntValue); Console.WriteLine("StringValue: {0}", dt.StringValue); Console.WriteLine("AnotherTypeValue.IntValue: {0}", dt.AnotherTypeValue.IntValue); Console.WriteLine("AnotherTypeValue.StringValue: {0}", dt.AnotherTypeValue.StringValue); Console.WriteLine("ListValue: "); foreach (object obj in dt.ListValue) { Console.WriteLine(obj.ToString()); } }