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

gan*_*ran 2 .net c# 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;}
}
Run Code Online (Sandbox Code Playgroud)

'ObjectContent`1'类型无法序列化内容类型'application/xml的响应主体; 字符集= UTF-8' .

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

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

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

Roy*_*tus 5

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

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

[KnownType(typeof(MyDataThingy2))]
public class MyDataThingy2 : IData
{ ... }
Run Code Online (Sandbox Code Playgroud)

这应该做的伎俩!