【发布时间】:2016-08-29 21:42:13
【问题描述】:
我想反序列化 Dictionary<string, AbstractDataObject>。 AbstractDataObject 是 SomeClass1 和 SomeClass2 继承自的抽象类。字典的键值(一个字符串)是类的名称:
{
"StoredData": {
"SomeClass1": {
"Foo": "Test"
},
"SomeClass2": {
"Bar": 123
}
}
}
类如下所示(简化):
public class Data
{
public Dictionary<string, AbstractDataObject> StoredData { get; set; }
}
public abstract class AbstractDataObject
{
}
public class SomeClass1 : AbstractDataObject
{
public string Foo { get; set; }
}
public class SomeClass2 : AbstractDataObject
{
public int Bar { get; set; }
}
如何告诉 Json.NET 根据 Dictionary 键推断类类型?我环顾四周,但不确定从哪里开始实现此功能
【问题讨论】:
-
使用类型名称是危险的,因为它违背了序列化的典型目的,即允许完全解耦的客户端/服务器。有没有一种方法可以设计成有明确的合同?
-
@SilasReinagel 你说的显式契约是什么意思?
-
例如,在您的客户端代码中使用具体的数据对象,用于特定的远程调用。
-
@SilasReinagel 哦,那将需要完全重写我当前的代码库:( 有没有办法仍然实现我想要的功能?
-
我不相信 Json.NET 中包含该功能。您必须自己创建一个图层才能在反序列化之前确定类型。这不是很难做到,但可能会让您在项目的进一步深入时感到头疼。
标签: c# json dictionary serialization json.net