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;」の応答本文をシリアル化できませんでした。charset=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 に答える