在JSON.NET中反序列化接口对象

时间:2014-04-10 13:28:12

标签: c# json serialization asp.net-web-api

我正在尝试从Web API调用返回JSON对象。我想根据它实现的接口返回这个对象,所以:

response.Content.ReadAsAsync<IThingy>().Result

我收到此错误:

  

无法创建IThingy类型的实例。 Type是接口或抽象类,无法实例化。

实际上这和this question中的问题一样,除了我想反序列化实现接口的对象,而不是反序列化其类型实现接口的属性。

如何进行反序列化?

1 个答案:

答案 0 :(得分:3)

您需要反序列化为具体类,因为必须定义该类的行为。你需要Thingy : IThingy,我会这样做:

IThingy result = response.Content.ReadAsAsync<Thingy>().Result;

你为什么要这样做?接口定义方法和属性的无行为,仅签名。假设你能够直接反序列化到IThingy并且它有一个方法DoMath(int x, int y) - 会做什么数学运算?没有定义的行为。这就是你必须选择具体课程的原因。