2013-04-12 4 views
1

다음 클래스가 있습니다 (단순화).ServiceStack.Text : DataMember 특성으로 장식되지 않은 속성의 serialization을 강제로 수행합니다.

[DataContract] 
public class ServiceResponse 
{ 
    public int Sequence { get; set; } 

    [DataMember] 
    public ServiceResponseStatus Status { get; set; } 
} 

내가 로깅 목적으로 객체를 직렬화 ServiceStack을 사용하고 DataContractSerializer가 나머지를시키는거야. 예상대로 ServiceStack은 DataMember 특성으로 장식되어 있지 않으므로 Sequence을 serialize하지 않습니다.

강제로 ServiceStack에서이 속성을 serialize 할 수 있습니까?

Marc Gravell이 비슷한 질문에 대한 대답 DataContract Serialization without DataMember Attribute은 다른 접근 방식을 제안하는 것으로 보이지만 나는 물어볼 것이라고 생각했습니다.

답변

2

DataContract/DataMember 속성을 사용하여 클래스를 꾸미는 것은 입니다. 특히은 직렬화하려는 속성을 선택하는 데 사용됩니다. 모든 속성을 직렬화하려는 경우 은 모든 속성을 제거합니다.

다른 방법에 대한 대답은 ignore properties in Servicestack serializers을 참조하십시오.

+0

다음과 같은 사항이 있습니다 : 'Sequence'를 포함하여 서비스에서 로깅 목적으로 모든 속성을 직렬화하고 싶습니다. 그러나 API에서 누설 된 속성을 원하지 않습니다 (클라이언트는 그것에 대해 알 필요가 없습니다). 왜 그것은'DataMember' 속성으로 꾸며져 있지 않습니다. 조금 더 명확 해 졌나요? – Moss

+0

로깅을 위해 다른 것을 사용하십시오. 마찬가지로'DataMember' 속성은 어떤 속성이 직렬화 될지 선택하는 데 사용됩니다. 즉, ** 의도 된 동작을 ** 어떻게 되돌릴지를 묻는 것입니다. 다른 것을 사용하십시오 - 이보다 더 명확하지 않습니다. – mythz

+0

귀하의 요지를 이해합니다. 나는 내가하려고하는 것이 이상하다고 생각하지만 ServiceStack을 사용하고 좋아했다. 이전에는 수동 직렬화를 없애고 싶었다. – Moss