Newtonsoft json反序列化字典

本文关键字:字典 反序列化 json Newtonsoft | 更新日期: 2023-09-27 17:54:23

我有以下类

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

我尝试使用newtonsoft Json序列化和反序列化,序列化工作。但在反序列化时,我得到以下错误:"创建一个TypeConverter将字符串转换为键类型",当我创建类型转换器时,它不会被反序列化器调用。

这是我如何使用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));

Newtonsoft json反序列化字典

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

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

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