.NET에서 Serialization은 객체를 저장하고, 객체를 다시 불러오는데 매우 유용하다. 그리고 네트워크로 Serialization된 객체를 전송하고,
다시 그 객체를 사용할 수 도 있는 .NET에서 핵심적인 기능중 하나이다.
XmlSerialization을 하기 위해 가장 유의할 점은 생성자는 input parameter가 없는 생성자만이 가능하다는 점을 항시 알아야지 된다.
input parameter가 있는 경우에는 Runtime시에 exception이 발생되게 된다.
다시 그 객체를 사용할 수 도 있는 .NET에서 핵심적인 기능중 하나이다.
XmlSerialization을 하기 위해 가장 유의할 점은 생성자는 input parameter가 없는 생성자만이 가능하다는 점을 항시 알아야지 된다.
input parameter가 있는 경우에는 Runtime시에 exception이 발생되게 된다.
/****************************** Module Header ******************************\ * Module Name: Program.cs * Project: CSXmlSerialization * Copyright (c) Microsoft Corporation. * * This sample shows how to serialize an in-memory object to a local xml file * and how to deserialize the xml file back to an in-memory object using * C#. The designed MySerializableType includes int, string, generic, as well * as customized type field and property. * * This source is subject to the Microsoft Public License. * See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL. * All other rights reserved. * * History: * * 7/29/2009 3:00 PM Colbert Zhou Created * * 8/20/2009 12:01 AM Jialiang Ge Reviewed \***************************************************************************/ #region Using directives using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.Xml.Serialization; using System.IO; using System.Collections; #endregion namespace CSXmlSerialization { class Program { static void Main(string[] args) { ///////////////////////////////////////////////////////////////// // Serialize the object to an XML file. // // Create and initialize a MySerializableType instance. MySerializableType instance = new MySerializableType(); instance.BoolValue = true; instance.IntValue = 1; instance.StringValue = "Test String"; instance.ListValue.Add("List Item 1"); instance.ListValue.Add("List Item 2"); instance.ListValue.Add("List Item 3"); instance.AnotherTypeValue = new AnotherType(); instance.AnotherTypeValue.IntValue = 2; instance.AnotherTypeValue.StringValue = "Inner Test String"; // Create the serializer XmlSerializer serializer = new XmlSerializer(typeof(MySerializableType)); // Serialize the object to an XML file using (StreamWriter streamWriter = File.CreateText( "CSXmlSerialization.xml")) { serializer.Serialize(streamWriter, instance); } ///////////////////////////////////////////////////////////////// // Deserialize from a XML file to an object instance. // // Deserialize the object MySerializableType deserializedInstance; using (StreamReader streamReader = File.OpenText( "CSXmlSerialization.xml")) { deserializedInstance = serializer.Deserialize(streamReader) as MySerializableType; } // Dump the object Console.WriteLine("BoolValue: {0}", deserializedInstance.BoolValue); Console.WriteLine("IntValue: {0}", deserializedInstance.IntValue); Console.WriteLine("StringValue: {0}", deserializedInstance.StringValue); Console.WriteLine("AnotherTypeValue.IntValue: {0}", deserializedInstance.AnotherTypeValue.IntValue); Console.WriteLine("AnotherTypeValue.StringValue: {0}", deserializedInstance.AnotherTypeValue.StringValue); Console.WriteLine("ListValue: "); foreach (object obj in deserializedInstance.ListValue) { Console.WriteLine(obj.ToString()); } } } ////// Serializable Type Declaration /// [Serializable()] public class MySerializableType { // String field and property private string stringValue; public string StringValue { get { return stringValue; } set { stringValue = value; } } // Bool field and property private bool boolValue; public bool BoolValue { get { return boolValue; } set { boolValue = value; } } // Int field and property private int intValue; public int IntValue { get { return intValue; } set { intValue = value; } } // Another type field and property private AnotherType anotherTypeValue; public AnotherType AnotherTypeValue { get { return anotherTypeValue; } set { anotherTypeValue = value; } } // Generic type field and property private ListlistValue = new List (); public List ListValue { get { return listValue; } set { listValue = value; } } // Ignore a field using NonSerialized attribute [NonSerialized()] private int ignoredField = 1; } /// /// Another Type Declaration /// [Serializable()] public class AnotherType { private string stringValue; public string StringValue { get { return stringValue; } set { stringValue = value; } } private int intValue; public int IntValue { get { return intValue; } set { intValue = value; } } } }