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에 따라 라이센스가 부여됩니다.