newtonsoft json反序列化字典

时间:2014-03-27 06:42:13

标签: c# json

我有以下课程

 [DataContract(IsReference = true)] 
 public abstract class Entity
 {
     [DataMember]
     protected Dictionary<MyStruct, MyObject> MyDict;

     ... 
 }

我尝试使用newtonsoft Json序列化和反序列化,序列化工作。 但是在deserializn上我收到以下错误: &#34;创建一个TypeConverter,将字符串转换为密钥类型&#34; , 当我创建一个类型转换器时,它不被deseializer调用。

这就是我使用JSON序列化程序的方法

StringBuilder sb = new StringBuilder();
TextWriter text = new StringWriter(sb);

var serializer = new JsonSerializer();
serializer.TypeNameHandling = TypeNameHandling.Auto;

var inst = new Instance();
serializer.Serialize(text, inst );

TextReader textReader = new StringReader(sb.ToString());
JsonReader reader = new JsonTextReader(textReader);
var res = serializer.Deserialize(reader, typeof(Instance));

1 个答案:

答案 0 :(得分:3)

Json序列化程序将键视为字符串,而不是对象。序列化程序具有一些您可以使用的属性,您可以执行以下操作:

 [JsonObject()]
 public class MyDictionaryType : Dictionary<MyStruct, MyObject>
 {
 }


 [DataContract(IsReference = true)] 
 public abstract class Entity 
 {
     [DataMember]
     protected MyDictionaryType  MyDict;

     ... 
 }