2009-08-24 2 views

답변

7

DataContractSerializer

그것은 예를 들어 기본적으로 WCF에 의해 사용됩니다. 비교를 위해 here을 참조하십시오.

개인적으로 나는 XmlSerializer이 내부 유형을 수행 할 수 없다는 것을 싫어합니다. DataContractSerializer에는 이러한 문제가 없습니다. 또한 DataContractSerializer은 제네릭과 같이 더 쉽습니다. 사람이 편집 가능한 XML 형식을 만들고 싶다면 이상적이지 않을 수 있습니다.

Maxim으로 지적했듯이 DataContractSerializer은 예상했던 것과 약간 다른 동작을합니다. 개체를 deserialize하기 위해 생성자를 호출하지 않습니다. 어떤 이유로 든 초기화를해야하는 경우 [OnDeserializing] 속성을 사용할 수 있습니다. 나는이 같은 패턴을 사용 :

[DataContract] 
public MyClass 
{ 
    public MyClass() 
    { 
     Initialize(); 
    } 

    [OnDeserializing] 
    private OnDeserializing(StreamingContext context) 
    { 
     Initialize(); 
    } 

    private void Initialize() 
    { 
     // Do stuff 
    } 
} 

은 마찬가지로, [OnDeserialized] 속성이 존재하고,뿐만 아니라 직렬화 버전.

+1

DataContractSerializer를 사용하여 해당 생성자를 호출하지 않도록주의하십시오. –

+0

좋은 지적입니다. 내가 알아 낸 바로 전에 시간에 나 혼란 스러웠다. :) – Thorarin