C \ # 실현 대상 의 직렬 화 (단순 공장 모델 실현)

23132 단어 단순 공장 모드

본 사례 는 간단 한 공장 모델 방법 으로 대상 의 직렬 화 를 실현 하고 현재 실 현 된 세 가지 방법 은 Xml, Soap 과 Binary 세 가지 방식 으로 구체 적 인 실현 방법 은 다음 과 같다.
직렬 화 기본 코드 는 다음 과 같 습 니 다.
 1 public class XSerializeTool

 2     {

 3         /// <summary>

 4         ///      

 5         /// </summary>

 6         /// <param name="fileName">     </param>

 7         public void Serialize(string fileName, object obj, Type type = null)

 8         {

 9             using (FileStream fileStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write))

10             {

11                 this.Serialize(fileStream, obj, type);

12             }

13         }

14 

15         /// <summary>

16         ///      

17         /// </summary>

18         /// <param name="fileStream"></param>

19         /// <param name="obj"></param>

20         /// <param name="type"></param>

21         protected virtual void Serialize(FileStream fileStream, object obj, Type type = null)

22         {

23 

24         }

25 

26         /// <summary>

27         ///       

28         /// </summary>

29         /// <param name="fileName"></param>

30         /// <returns></returns>

31         public object DeSerialize(string fileName, Type type = null)

32         {

33             using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))

34             {

35                 return this.DeSerialize(fileStream, type);

36             }

37         }

38 

39         /// <summary>

40         ///       

41         /// </summary>

42         /// <param name="fileStream"></param>

43         /// <returns></returns>

44         protected virtual object DeSerialize(FileStream fileStream, Type type = null)

45         {

46             return null;

47         }

48     }

Xml 직렬 화 구현 코드 는 다음 과 같 습 니 다.
 1 public partial class XmlSerializeTool : XSerializeTool

 2     {

 3         protected override void Serialize(FileStream fileStream, object obj, Type type = null)

 4         {

 5             if (type == null)

 6             {

 7                 throw new Exception("");

 8             }

 9             XmlSerializer serializer = new XmlSerializer(type);

10             serializer.Serialize(fileStream, obj);

11         }

12 

13         protected override object DeSerialize(FileStream fileStream, Type type = null)

14         {

15             if (type == null)

16             {

17                 throw new Exception("");

18             }

19             XmlSerializer serializer = new XmlSerializer(type);

20             return serializer.Deserialize(fileStream);

21         }

22     }

Soap 직렬 화 코드 는 다음 과 같 습 니 다.
 1 public partial class XSoapSerializeTool : XSerializeTool

 2     {

 3 

 4         protected override void Serialize(FileStream fileStream, object obj, Type type = null)

 5         {

 6             SoapFormatter formater = new SoapFormatter();

 7             formater.Serialize(fileStream, obj);

 8         }

 9 

10         protected override object DeSerialize(FileStream fileStream, Type type = null)

11         {

12             SoapFormatter formater = new SoapFormatter();

13             return formater.Deserialize(fileStream);

14         }

15     }

직렬 화 실례 화 를 실현 하 는 간단 한 공장 방법 코드 는 다음 과 같다.
 1  public partial class XSerializeContext

 2     {

 3         public static XSerializeTool CreateInstance(XSerializeType serializeType)

 4         {

 5             switch (serializeType)

 6             {

 7                 case XSerializeType.Xml:

 8                     return new XmlSerializeTool();

 9                 case XSerializeType.Binary:

10                     return new XBinarySerializeTool();

11                 case XSerializeType.Soap:

12                     return new XSoapSerializeTool();

13                 default:

14                     return null;

15             }

16         }

17     }

직렬 화 형식의 매 거 진 정 의 는 다음 과 같다.
1 public enum XSerializeType

2     {

3         Xml = 0,

4         Binary = 2,

5         Soap = 3

6     }

구체 적 인 호출 방법 은 다음 과 같다. 서열 화 할 클래스 의 정 의 는 다음 과 같다.
 1 [Serializable]

 2     public partial class MyObject

 3     {

 4         private string m_UserName = string.Empty;

 5 

 6         public string UserName

 7         {

 8             get { return m_UserName; }

 9             set { m_UserName = value; }

10         }

11 

12         private string m_Address = string.Empty;

13 

14         public string Address

15         {

16             get { return this.m_Address; }

17             set { this.m_Address = value; }

18         }

19 

20         public override string ToString()

21         {

22             return string.Format("   :{0},  :{1}", m_UserName, m_Address);

23         }

24     }

직렬 화 클 라 이언 트 호출 코드 는 다음 과 같 습 니 다.
 1   static void Main(string[] args)

 2         {

 3             MyObject myObject = new MyObject();

 4             myObject.UserName = "Wss";

 5             myObject.Address = "   ";

 6 

 7             XSerializeTool tool = XSerializeContext.CreateInstance(XSerializeType.Xml);

 8             string fileName = "C:\\Test.xml";

 9             tool.Serialize(fileName, myObject, typeof(MyObject));

10             MyObject myOjb = (MyObject)tool.DeSerialize(fileName, typeof(MyObject));

11 

12             fileName = "C:\\Test.dat";

13             tool = XSerializeContext.CreateInstance(XSerializeType.Binary);

14             tool.Serialize(fileName, myObject);

15             myOjb = (MyObject)tool.DeSerialize(fileName, typeof(MyObject));

16 

17             fileName = "C:\\Test.soap";

18             tool = XSerializeContext.CreateInstance(XSerializeType.Soap);

19             tool.Serialize(fileName, myObject);

20             myOjb = (MyObject)tool.DeSerialize(fileName, typeof(MyObject));

21         }

 

좋은 웹페이지 즐겨찾기