Json.net反序列化嵌套字典

我正在使用Json.NET反序列化包含嵌套字典的对象。 以下是我想要做的一个示例

public interface IInterface { String Name { get; set; } } public class AClass : IInterface { public string Name { get; set; } } public class Container { public Dictionary Map { get; set; } public Container() { Map = new Dictionary(); } } public static void Main(string[] args) { var container = new Container(); container.Map.Add(new AClass() { Name = "Hello World" }, "Hello Again"); var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects, PreserveReferencesHandling = PreserveReferencesHandling.All, }; string jsonString = JsonConvert.SerializeObject(container, Formatting.Indented, settings); var newContainer = JsonConvert.DeserializeObject(jsonString); } 

我收到exception消息:无法将字符串’ConsoleApplication1.AClass’转换为字典键类型’ConsoleApplication1.IInterface’。 创建TypeConverter以将字符串转换为键类型对象。 请接受我的道歉但是我无法找到一种在Dictionary键中反序列化接口的方法。

非常感谢你提前

问题是JSON字典(对象)只支持字符串键,因此Json.Net将您的复杂键类型转换为Json字符串(调用ToString()),然后无法再将其反序列化为复杂类型。 相反,您可以通过应用JsonArray属性将字典序列化为键值对的集合。

有关详细信息,请参阅此问