2

我有一个适用于具体数据类型的 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 中将接口指定为服务的 DataContracts?这曾经在 WCF 中工作

4

1 回答 1

5

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

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

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

这应该可以解决问题!

于 2013-01-30T11:56:09.003 回答