2011-02-03 2 views
8

는 내가 DataContractJsonSerializer로 직렬화 된 JSON 문자열이 때로는 기본 유형을 직렬화 때에만이 작업을 수행 할 것으로 보인다 내 관찰에 근거DataContractJsonSerializer에는 형식 정보가 언제 포함됩니까?

{"__type":"MyClass:#MyNamespace", ... } 

의 형태로 형식 정보하지만 알려진 하위를 포함 것으로 나타났습니다 대신에 형식이 전달되면 사용자 지정 형식이 발생할 때마다 serializer가이 동작을 일관되게 나타내도록 강제적으로 확인하는 공식 문서를 찾지 못했습니다.

내 관찰 결과가 맞는지 누구든지 확인할 수 있습니까? 더 나은 방법은, 가능하다면 serializer가 항상 사용자 정의 유형에 대한 유형 정보를 직렬화하도록 지시하는 방법을 알고 있다면?

감사합니다,

답변

14

사실, 당신은 항상 지속적으로 __type 정보를 방출하는 시리얼 라이저를 강제 할 수 있습니다.

serializer 독립 실행 형을 사용하는 경우 "alwaysEmitTypeInformation"인수를 사용하는 constructor overload을 사용하십시오. 사실을 전달하십시오.

DataContractJsonSerializerOperationBehavior를 사용하는 경우 해당 특성의 동일한 속성을 true로 설정하십시오. 나는 당신이 config를 통해 그것을 할 수 있다고 믿는다.

마지막으로 자세한 내용은 "유형 힌트가 방출되는 경우"절을 참조하십시오. http://msdn.microsoft.com/en-us/library/bb412170.aspx.

희망이 도움이됩니다.

+0

위대한! 그게 정확히 내가 뭘 찾고 있었는지, 생성자 오버로드 중 하나가 당신이 항상 유형 정보를 내보낼 지 여부를 알려주도록 알려주지 않았다는 것을 지적 해 주셔서 감사합니다! – theburningmonk

+0

예. 감사합니다. JSON을 기본 유형을 전달할 때 전체 유형으로 직렬화 할 수있는 방법을 생각해 보았습니다. 그것은 제가 생각해 낼 수있는 해킹 해결책보다 훨씬 쉽게 만듭니다. – Telavian

관련 문제