■ BinaryFormatter 클래스의 Serialize 메소드를 사용해 객체를 직렬화하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; #region 객체 직렬화하기 - SerializeObject(sourceObject) /// <summary> /// 객체 직렬화하기 /// </summary> /// <param name="sourceObject">소스 객체</param> /// <returns>직렬화 객체 바이트 배열</returns> public byte[] SerializeObject(object sourceObject) { BinaryFormatter binaryFormatter = new BinaryFormatter(); MemoryStream memoryStream = new MemoryStream(); binaryFormatter.Context = new StreamingContext(StreamingContextStates.Clone); binaryFormatter.Serialize(memoryStream, sourceObject); return memoryStream.ToArray(); } #endregion |
■ JavaScriptSerializer 클래스의 Serialize 메소드를 사용해 JSON을 직렬화하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
using System; using System.Web.Script.Serialization ; /// <summary> /// 학생 /// </summary> public class Student { /// <summary> /// ID /// </summary> public string ID; /// <summary> /// 성명 /// </summary> public string Name; /// <summary> /// 학년 /// </summary> public int Grade; } ... Student student = new Student() { ID = "A", Name = "홍길동", Grade = 3 }; JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); string json = javaScriptSerializer.Serialize(student); Console.WriteLine(json); |
※ System.Web.Extensions 어셈블리 참조를 설정한다.
■ XmlElementAttribute 클래스를 사용해 DateTime 직렬화시 연월일만 저장하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
using System.Xml.Serialization; /// <summary> /// 사람 /// </summary> public class Person: INotifyPropertyChanged { ... //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Private ... /// <summary> /// 생일 /// </summary> private DateTime? birthday = new DateTime(1800, 1, 1); ... //////////////////////////////////////////////////////////////////////////////////////////////////// Property ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생일 - BirthDay /// <summary> /// 생일 /// </summary> [XmlElement(DataType = "date")] public DateTime? Birthday { set { this.birthday = value; OnPropertyChanged("Birthday"); } get { return this.birthday; } } #endregion ... } |
※ OnPropertyChanged 메소드 구현은 생략한다.
■ XmlSerializer 클래스의 Deserialize 메소드를 사용해 객체를 역직렬화하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
using System; using System.IO; using System.Xml.Serialization; #region 객체 역직렬화하기 - DeserializeObject(xml, objectType) /// <summary> /// 객체 역직렬화하기 /// </summary> /// <param name="xml">XML</param> /// <param name="objectType">객체 타입</param> /// <returns>역직렬화 객체</returns> public object DeserializeObject(string xml, Type objectType) { XmlSerializer xmlSerializer = new XmlSerializer(objectType); object targetObject = xmlSerializer.Deserialize(new StringReader(xml)); return targetObject; } #endregion |
■ XmlSerializer 클래스의 Serialize 메소드를 사용해 객체를 직렬화하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
using System.IO; using System.Xml; using System.Xml.Serialization; #region 객체 직렬화하기 - SerializeObject(sourceObject) /// <summary> /// 객체 직렬화하기 /// </summary> /// <param name="sourceObject">소스 객체</param> /// <returns>객체 직렬화 XML</returns> public string SerializeObject(object sourceObject) { XmlDocument xmlDocument = new XmlDocument(); XmlSerializer xmlSerializer = new XmlSerializer(sourceObject.GetType()); using(MemoryStream memoryStream = new MemoryStream()) { xmlSerializer.Serialize(memoryStream, sourceObject); memoryStream.Position = 0; xmlDocument.Load(memoryStream); return xmlDocument.InnerXml; } } #endregion |
■ XmlSerializer 클래스의 Deserialize 메소드를 사용해 객체를 역직렬화하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
using System.IO; using System.Xml.Serialization; #region 객체 역직렬화하기 - DeserializeObject<T>(sourceFilePath) /// <summary> /// 객체 역직렬화하기 /// </summary> /// <typeparam name="T">객체 타입</typeparam> /// <param name="sourceFilePath">소스 파일 경로</param> /// <returns>역직렬화 객체</returns> public T DeserializeObject<T>(string sourceFilePath) { StreamReader streamReader = null; XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); object targetObject = null; try { streamReader = new StreamReader(sourceFilePath); targetObject = xmlSerializer.Deserialize(streamReader); } finally { if(streamReader != null) { streamReader.Close(); streamReader = null; } } return (T)targetObject; } #endregion |
■ XmlSerializer 클래스를 사용해 객체에서 XML 파일을 저장하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
using System.IO; using System.Xml.Serialization; #region XML 저장하기 - SaveXML(sourceObject, targetFilePath) /// <summary> /// XML 저장하기 /// </summary> /// <param name="sourceObject">소스 객체</param> /// <param name="targetFilePath">타겟 파일 경로</param> public void SaveXML(object sourceObject, string targetFilePath) { StreamWriter streamWriter = null; try { string directoryPath = Path.GetDirectoryName(targetFilePath); if(!Directory.Exists(directoryPath)) { Directory.CreateDirectory(directoryPath); } streamWriter = new StreamWriter(targetFilePath); XmlSerializer xmlSerializer = new XmlSerializer(sourceObject.GetType()); xmlSerializer.Serialize(streamWriter, sourceObject); } finally { if(streamWriter != null) { streamWriter.Close(); streamWriter = null; } } } #endregion |
■ DXSerializer 클래스의 AllowPropertyEvent 첨부 이벤트를 사용해 수동으로 직렬화 항목을 설정하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
using DevExpress.Xpf.Core.Serialization; using DevExpress.Xpf.Grid; ... foreach(GridColumn gridColumn in this.gridControl.Columns) { gridColumn.AddHandler ( DXSerializer.AllowPropertyEvent, new AllowPropertyEventHandler(gridColumn_AllowProperty) ); } this.gridControl.SaveLayoutToXml("d:\\layout.xml"); ... #region 그리드 컬럼 허용 속성 처리하기 - gridColumn_AllowProperty(sender, e) /// <summary> /// 그리드 컬럼 허용 속성 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void gridColumn_AllowProperty(object sender, AllowPropertyEventArgs e) { e.Allow = e.DependencyProperty == GridColumn.ActualWidthProperty || e.DependencyProperty == GridColumn.FieldNameProperty || e.DependencyProperty == GridColumn.VisibleProperty; } #endregion |
■ DXWindow 클래스에서 레이아웃 설정을 로드하고 저장하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
using System.ComponentModel; using System.Windows; using DevExpress.Xpf.Core; using DevExpress.Xpf.Core.Serialization; /// <summary> /// 테스트 DX 윈도우 /// </summary> public partial class TestDXWindow : DXWindow { ... Loaded += dxWindow_Loaded; Closing += dxWindow_Closing; ... #region DX 윈도우 로드시 처리하기 - dxWindow_Loaded(sender, e) /// <summary> /// DX 윈도우 로드시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void dxWindow_Loaded(object sender, RoutedEventArgs e) { string filePath = "c:\\layout.xml"; string applicationName = "TestApplication"; DXSerializer.Deserialize(this, filePath, applicationName, null); } #endregion ... #region DX 윈도우 닫을 경우 처리하기 - dxWindow_Closing(sender, e) /// <summary> /// DX 윈도우 닫을 경우 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void dxWindow_Closing(object sender, CancelEventArgs e) { string filePath = "c:\\layout.xml"; string applicationName = "TestApplication"; DXSerializer.Serialize(this, filePath, applicationName, null); } ... } |