DataContract
이
Dictionary
: 나는를 단순화 할 수 있습니다 방법사용자 정의 직렬화
<Data>
<a:KeyValueOfstringanyType>
<a:Key>ID</a:Key>
<a:Value i:type="s:int">2</a:Value>
</a:KeyValueOfstringanyType>
<a:KeyValueOfstringanyType>
<a:Key>Value</a:Key>
<a:Value i:type="s:int">4711</a:Value>
</a:KeyValueOfstringanyType>
</Data>
: 여기
[DataContract]
public class MyDictionary : IDictionary<string, object> {
[DataMember(Name = "Data")]
protected IDictionary<string, object> Dictionary { get; private set; }
// ...
}
는 XML 출력의와 관계있는 부분입니다 다음과 같이 출력 :
<Data>
<ID i:type="s:int">2</ID>
<Value i:type="s:int">4711</Value>
</Data>
사전 ke y는 문자열로 제한되므로 아무도 잘 작동하지 않는 비 ASCII 키를 사용하는 어리석은 아이디어를 얻지 못한다. CollectionDataContract
이라는 속성을 발견했는데 원하는 부분에 조금 더 가깝지만 키 값 쌍이 저장되어 메모리를 낭비합니다. 어쩌면 클래스 ISerializable
으로 슬블 할 수는 있지만 DataContractSerializer
에 문제가 있는지 확실하지 않습니다. 그런데 솔루션도 DataContractJsonSerializer
과 함께 작동해야합니다.
이렇게 조숙 한 최적화의 경우가 아닐까요? 필자는 DataContracts와 serializer/deserializers가 두통을 피할 수있는 곳에서 자신의 일을하는 경향이있다. –
@ChrisSinclair 많은 키 값 쌍이있을 수 있으며 JSON 형식의 Android 클라이언트로 해당 항목을 읽습니다. 지금까지 나는 일이 합리적이어야한다고 생각합니다. – rekire
이 경우 XML 직렬 변환기가 아닌 JSON 직렬 변환기를 사용 하시겠습니까? 그렇다면 아마도 JSON 시리얼 라이저를 붙이고 그 결과를 보는 것이 가치가있을 것입니다. (아마도 이미 충분히 최적화되어있다.) 또한, XML을 유지하려면, ID/Value 주위에 어떤 종류의'Entry' 래퍼가 있어야 할 것이므로, 여러 KeyValuePairs를 가질 수있다. '012 : ID : type = "s : int"> 2 <값 i : 유형 = "s : int"> 4711 편집 : 죄송합니다, 나는 그것이 작동되기를 바라는 마지막 문장을 발견하지 못했습니다. JSON 및 XML 시리얼 라이저 모두를 지원합니다. –