AboutSerialize.zip



직렬화(Serializable)


개체의 상태 데이터를 일정한 위치(메모리,물리적 파일 등) 에 선형적인방법으로 지속시키는 것을 말한다.

BinaryFormatter를 이용한 직렬화와 SoapFormatter를 사용한 직렬화로 2가지가있다.


바이너리 직렬화(BinaryFormatter 사용)


바이너리 직렬화는, 타입이 원래 객체의 타입과 똑같도록 보존해 줍니다. 객체의 상태를 다른 응용프로그램 호출 사이에

보존하고자 할 때 유용합니다. Binary라는 용어가 저장매체에 저장되어 있는 객체와 동일한 복사본을 생성하는데 필요한

필수적인 정보라는 뜻을 가지고 있습니다. 


SOAP 직렬화


SOAP 프로토콜은 서로 다른 아키텍쳐를 가지는 어플리케이션 간의 통신에 이상적입니다. .NET에서 SOAP Serialization을 이용하면

어플리케이션이 System.Runtime.Serialization.Formatter.Soap을 참조해야 합니다. SOAP 직렬화의 기본적인 장점은 

이식성 입니다. SoapFormatter는 객체를 직렬화해서 SOAP 메시지로 바꾸거나, SOAP 메시지로를 파싱해서 직렬화된 객체를 추출해 냅니다.



바이너리 형식으로 저장된 정보 






직열화 예제 코드


Main Class

 using System.Runtime.Serialization.Formatters.Binary; 


namespace AboutSerialize 

    class Program 
    { 
        static void Main(string[] args) 
        { 
            School school = new School(); 
            Console.WriteLine("Serialize 이전"); 
            Stu s1 = new Stu(1"a1"); 
            school.AddStu(s1); 
            Stu s2 = new Stu(2"a2"); 
            school.AddStu(s2); 
            Stu s3 = new Stu(3"a3"); 
            school.AddStu(s3); 
            Stu s4 = new Stu(4"a4"); 
            school.AddStu(s4); 
            Stu s5 = new Stu(5"a5"); 
            school.AddStu(s5); 
            school.AllView(); 

            FileStream fs = new FileStream(@"cozy.txt", FileMode.Create); 
            BinaryFormatter bf = new BinaryFormatter(); 

            bf.Serialize(fs, school); 
            fs.Close(); 

            Console.WriteLine("DeSerialize 한 개체"); 
            fs = new FileStream(@"cozy.txt", FileMode.Open); 
            School school2 = bf.Deserialize(fs) as School; 
            school2.AllView(); 
            fs.Close(); 
        } 
    } 
}


Stu Class

 namespace AboutSerialize 


    [Serializable] 
    class Stu 
    { 
        int num; 
        string name; 
        public Stu(int _num, string _name) 
        { 
            num = _num; 
            name = _name; 
        } 
        public override string ToString() 
        { 
            return "이름은 : " + name + " 번호 : " + num; 
        } 
    } 
}


School Class

 namespace AboutSerialize 


    [Serializable] 
    class School 
    { 
        List<Stu> list = new List<Stu>(); 
        public void AllView() 
        { 
            foreach (Stu s in list) 
            { 
                Console.WriteLine(s.ToString()) ; 
            } 
        } 
        public void AddStu(Stu s) 
        { 
            list.Add(s); 
        } 
    } 
}


'Programing > C#&.Net' 카테고리의 다른 글

회원관리 연습  (0) 2016.11.30
.NET 리모팅  (0) 2016.11.30
명시적 어셈블리 로딩  (0) 2016.11.30
인덱서(Indexer) 예제  (0) 2016.11.30
Delegate(대리자) 프로그램  (0) 2016.11.30

+ Recent posts