我有以下问题,对此我无法解决:JSON.NET反序列化与类型参数对象
我有一个都实现一个名为IProtocol
的接口不同的类。现在命名为SimpleProtocol
,ParallelProtocol
。我想坚持这些对象,所以我用JSON.NET,一切正常。除了当我试图反序列化他们它完美的作品时,我知道他们都应该是类型,例如:
SimpleProtocol p = JsonConvert.DeserializeObject<SimpleProtocol>(myJsonData);
不过,我现在在这里我要加载的JSON数据,并获得情况一个IProtocol
回来了,但这是可以理解的,JSON不允许;例如,这样的事情确实不工作:
IProtocol p1 = JsonConvert.DeserializeObject<IProtocol>(myJsonData); // does not work
IProtocol p2 = (IProtocol)JsonConvert.DeserializeObject(myJsonData); // also, does not work
所以,仰视API我发现这个方法的签名:
public static Object DeserializeObject(
string value,
Type type
)
它看起来就像我所需要的东西,通过这样尝试在一个字符串也持续类型和检索它:
// test
Type protocolType = Type.GetType("MyApp.Protocols.SimpleProtocol");
IProtocol p1 = JsonConvert.DeserializeObject(myJsonData, protocolType);
我得到一个错误,这是不可能投下Newtonsoft.Json.Linq.JObject
至IProtocol
。这很奇怪,我不知道如何解决这个问题。
无法在泛型方法中传递Type对象,所以我基本停留在这里。有没有解决这个问题的方法,最好不使用反射?它在我看来这是一个非常正常的用例。
我可以做些什么,但对我来说似乎有点'肮脏',是创建一个简单的包装类,其中包含一个IProtocol实例并序列化/反序列化?
你反序列化的单个元素或集合他们? – R0MANARMY 2013-03-02 19:20:07
您可能想看看这些问题,看看他们是否有所帮助:[在JSON.NET中为反序列化投射接口](http://stackoverflow.com/q/5780888/164966),[如何实现自定义JsonConverter在JSON.NET中反序列化基类对象列表](http://stackoverflow.com/q/8030538/164966),[使用Json.NET转换器反序列化属性](http://stackoverflow.com/q/ 164966分之2254872)。 – R0MANARMY 2013-03-02 19:26:06
感谢您的提示,我已经阅读过这些提示,但我的解决方案证明不同(请参阅下文)。 – avanwieringen 2013-03-04 08:33:39