2009-06-30 2 views
1

는 다음 클래스 (닷넷 3.5)을 갖는 :공용 속성이나 필드가없는 매개 변수없는 생성자가있는 XmlSerializer ... 가능합니까?

public class Something 
{ 
    public string Text {get; private set;} 

    private Something() 
    { 
     Text = string.Empty; 
    } 

    public Something(string text) 
    { 
     Text = text; 
    } 
} 

이 오류없이 직렬화하지만 공공 세터를 가지고 있지 않기 때문에 결과 XML은 텍스트 속성을 포함하지 않습니다.

XmlSerializer에 이러한 속성이 포함될 수있는 방법이 있습니까?

답변

4

XmlSerializer는 공용 읽기에 대해/회원 쓰기 관심. 하나의 옵션은 IXmlSerializable을 구현하는 것이지만 로트는입니다. 보다 실용적인 옵션 (사용 가능하고 적절한 경우)를 사용 할 수있다 DataContractSerializer :

[DataContract] 
public class Something 
{ 
    [DataMember] 
    public string Text {get; private set;} 

    private Something() 
    { 
     Text = string.Empty; 
    } 

    public Something(string text) 
    { 
     Text = text; 
    } 
} 

이 모두 공공 및 민간 회원에 작동하지만, 생성되는 XML은 확실히 동일하지 않습니다, 당신은 XML 속성을 지정할 수 없습니다 .

+0

Thanks Marc, 그럴 수도 있습니다.이 속성에 대해 알지 못했습니다. 당신이 언급 한 두 가지 단점은 그들이 유일한 존재인가 아니면 다른 문제도 있습니까? –

+0

여러면에서, 그것은/더 나은/시리얼 라이저 (더 새로운 것이기 때문에 당신이 바랄 겁니다)입니다 - 그러나 그것은 다른 목적을 가지고 있습니다. xml에 대한 엄격한 제어가 필요한 경우 유연하지 않습니다. 그러나 데이터를 직렬화하기 만하면 작동합니다. 또는 protobuf-net ;-p를 시도하십시오. –

+0

참고 사항을 System.Runtime.Serialization (.NET 3.0)에 추가해야합니다. –

0

아니요. XML serialization은 공용 읽기/쓰기 필드 및 개체 속성 만 serialize합니다.

-1

 
Try

[Serializable] public class Something { ... }

+0

XmlSerializer에는 [Serializable]이 필요하지 않으며 읽기 전용 멤버를 serialize 할 때 어떤 작업도 수행하지 않습니다. –

+0

가끔 [Serializable]이 필요합니다. –

+0

@Henk : 언제 [Serializable]이 필요합니까? –

관련 문제