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         }  이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 --- 간단 한 공장 모델 (학습 노트)간단 한 공장 은 사실상 디자인 모델 이 아니 라 프로 그래 밍 습관 과 비슷 합 니 다! 먼저 코드 를 보고 코드 에서 이 프로 그래 밍 습관 을 이해 하 세 요. 코드 에서 알 수 있 듯 이 대상 을 만 들 기 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.