基本上我有一个DataContract
包含一个Dictionary
:
[DataContract]
public class MyDictionary : IDictionary<string, object> {
[DataMember(Name = "Data")]
protected IDictionary<string, object> Dictionary { get; private set; }
// ...
}
这是 XML 输出的相关部分:
<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>
如何在此处将输出简化为以下内容:
<Data>
<ID i:type="s:int">2</ID>
<Value i:type="s:int">4711</Value>
</Data>
Dictionary 键仅限于字符串,因此如果没有人想到使用应该可以正常工作的非 ascii 键的愚蠢想法。我发现这个属性CollectionDataContract
更接近我想要的,但是键值对将被完整保存,这会浪费内存。也许可以与班级相处融洽,ISerializable
但我不确定这是否会给DataContractSerializer
. 顺便说一句,该解决方案也应该适用于DataContractJsonSerializer
.