ASP.NET MVC4 Web API接口作为数据契约

时间:2013-01-30 11:48:54

标签: c# .net asp.net-mvc asp.net-mvc-4 asp.net-web-api

我有一个MVC4 Web API服务,适用于具体的数据类型。但是当我将接口指定为契约并尝试从操作中返回具体类型时,它会抛出错误

public interface IData
{
  string NameText {get;set;}
}

[KnownType(typeof(IData))]
public class Data : IData 
{
  string NameText {get;set;}
}
  

'ObjectContent`1'类型无法序列化响应正文   内容类型'application / xml;字符集= UTF-8' 。

     

考虑使用DataContractResolver或添加任何未知的类型   静态地到已知类型的列表 - 例如,通过使用   KnownTypeAttribute属性或通过将它们添加到已知列表中   传递给DataContractSerializer的类型。

我尝试在指定接口类型的具体类型上添加KnownType合约,但它不起作用。

是否无法在MVC Web API中将接口指定为Service的DataContracts?这曾经在WCF中工作

1 个答案:

答案 0 :(得分:5)

[KnownType]用于指定具体类,而不是接口。如果您指定哪些类使用[KnownType]实现IData,那么至少MVC知道它将序列化/反序列化的类型:

[KnownType(typeof(MyDataThingy1))]
public class MyDataThingy1 : IData
{ ... }

[KnownType(typeof(MyDataThingy2))]
public class MyDataThingy2 : IData
{ ... }

这应该可以解决问题!