我有一个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中工作
答案 0 :(得分:5)
[KnownType]
用于指定具体类,而不是接口。如果您指定哪些类使用[KnownType]
实现IData,那么至少MVC知道它将序列化/反序列化的类型:
[KnownType(typeof(MyDataThingy1))]
public class MyDataThingy1 : IData
{ ... }
[KnownType(typeof(MyDataThingy2))]
public class MyDataThingy2 : IData
{ ... }
这应该可以解决问题!