... | ... | @@ -427,7 +427,7 @@ class BinaryRWEx //기본형 타입을 2진 데이터로 바꿔서 쓴다. 문 |
|
|
```
|
|
|
|
|
|
### BinaryFormatter
|
|
|
BinaryFormatter는 2진 데이터로 직렬화하기 때문에 다른 직렬화 방식에 비해서 속도가 빠르고 직렬화 결과의 용량도 작다. 그리고 닷넷 응용 프로그램끼리만 직렬화해서 데이터 교환이 가능하다.
|
|
|
BinaryFormatter는 2진 데이터로 직렬화하기 때문에 다른 사용자 정의 클래스 직렬화 방식에 비해서 속도가 빠르고 직렬화 결과의 용량도 작다. 그리고 닷넷 응용 프로그램끼리만 직렬화해서 데이터 교환이 가능하다.
|
|
|
|
|
|
```c#
|
|
|
[Serializable] //Serializable 특성을 지정하면 사용자 정의 클래스 직렬화를 간편하게 할 수 있다.
|
... | ... | @@ -474,4 +474,59 @@ class BinaryFormatterEx |
|
|
```
|
|
|
|
|
|
### XmlSerializer
|
|
|
XmlSerializer는 클래스의 내용을 문자열로 직렬화한다. 그리고 [Serializable] 특성을 지정하지 않아도 사용할 수 있지만, 다음과 같은 제약사항이 있다.
|
|
|
|
|
|
* public 접근 제한자의 클래스여야 한다.
|
|
|
* 기본 생성자를 포함하고 있어야 한다.
|
|
|
* public 접근 제한자가 적용된 필드만 직렬화/역직렬화한다.
|
|
|
|
|
|
```c#
|
|
|
public class Person //public 접근 제한자의 클래스여야 XmlSerializer를 쓸 수 있다.
|
|
|
{
|
|
|
public int age; //public 으로 선언된 프로퍼티만 직렬화/역직렬화가 가능하다.
|
|
|
public string name;
|
|
|
private int gender;
|
|
|
|
|
|
public Person() //기본 생성자를 포함하고 있어야 한다.
|
|
|
{
|
|
|
}
|
|
|
|
|
|
public Person(int age, string name, int gender)
|
|
|
{
|
|
|
this.age = age;
|
|
|
this.name = name;
|
|
|
this.gender = gender;
|
|
|
}
|
|
|
|
|
|
public override string ToString()
|
|
|
{
|
|
|
return string.Format("{0} {1}", this.age, this.name);
|
|
|
}
|
|
|
}
|
|
|
class XmlSerializerEx
|
|
|
{
|
|
|
public static void Main()
|
|
|
{
|
|
|
MemoryStream ms = new MemoryStream();
|
|
|
XmlSerializer xs = new XmlSerializer(typeof(Person));
|
|
|
|
|
|
Person person = new Person(25, "Doh", 1);
|
|
|
|
|
|
//MemoryStream에 Person을 문자열로 직렬화.
|
|
|
xs.Serialize(ms, person); //public으로 선언한 age와 name만 직렬화된다.
|
|
|
|
|
|
ms.Position = 0;
|
|
|
|
|
|
Person clone = xs.Deserialize(ms) as Person;
|
|
|
|
|
|
Console.WriteLine(clone); //private으로 설정한 프로퍼티는 직렬화 되지 않아서 출력되지 않음.
|
|
|
|
|
|
byte[] buf = ms.ToArray();
|
|
|
|
|
|
Console.WriteLine(Encoding.UTF8.GetString(buf)); //Xml형식으로 된 문자열을 출력한다. 기본적으로 UTF-8 인코딩으로 객체를 문자열로 직렬화한다.
|
|
|
//XmlSerializer는 다른 플랫폼 사이에서 상호 운용성이 높다. 문제는 실제 전송되는 데이터에 비해 형식상 붙는 데이터가 많아서 크기가 커진다.
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
|