2012-02-06 4 views
0

スロー、私は基本的なサービスが行くと戻り値の型としてHttpResponseMessageを使用してのフルパワーを活用しようとしています。私はリストを返すと、私は回避できない周りの次のエラーを取得しようとしています。WCFのWeb API 0.6 - HttpResponseMessageにリスト<T>を返すが、私はWCFのWeb APIにかなり新しいです例外

これは非常に基本的なストレートXMLサービスです。

すべてのアイデアをいただければ幸いです。ありがとう。

タイプ 'System.Net.Http.HttpResponseMessage`1は[System.Collections.Generic.List`1 [Entities.UploadedDocumentSegmentType]' をシリアル化することができません。 DataContractAttribute属性でそれをマークし、すべてのメンバを にマークすることをDataMemberAttribute属性でシリアル化する必要があることを考慮してください。タイプ がコレクションの場合は、 CollectionDataContractAttributeでマークすることを検討してください。他のサポートされている種類については、Microsoft .NET Framework のドキュメントを参照してください。ここで

は私のサービスです:

[ServiceContract] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
public class DocumentService 
{ 
    [WebGet(UriTemplate = "/GetAllUploadableDocumentTypes")] 
    public HttpResponseMessage<List<UploadedDocumentSegmentType>> GetAllUploadableDocumentTypes() 
    { 
     UploadedDocumentManager udm = new UploadedDocumentManager(); 
     return new HttpResponseMessage<List<UploadedDocumentSegmentType>>(udm.GetAllUploadableDocumentTypes());           
    } 
} 

クラスUploadedDocumentSegmentTypeは、このような次のように定義されます

[Serializable] 
public class UploadedDocumentSegmentType 
{ 
    public UploadedDocumentSegmentType(); 

    public int DocTracSchemaID { get; set; } 
    public int ID { get; set; } 
    public string Type { get; set; } 
} 

そして私もこれを試してみました:

[Serializable] 
[DataContract] 
public class UploadedDocumentSegmentType 
{ 
    public UploadedDocumentSegmentType(); 

    [DataMember] 
    public int DocTracSchemaID { get; set; } 
    [DataMember] 
    public int ID { get; set; } 
    [DataMember] 
    public string Type { get; set; } 
} 

UDPATE:私は、WCFを使用しましたRESTサービスアプリケーションcrにするVisual Studioテンプレートサービスを提供する。私は最初から試して、WebGETメソッドのサンプルの戻り値の型をWebResponseMessageに変更し、そこに同じエラーがスローされます。それは私のコードではなく、私の人生のために私は理解できないものです。

+0

だから、どこか深いところに問題があるように思えるかもしれません。それはHttpResponseMessageで返されたもので爆発します。このようなものであっても、同じエラーが発生します。私は{ 新しいHttpResponseMessage ( "テスト"、HttpStatusCodeを返す ...私は本当に基本的で愚かな何かが欠けてる知っている '[のWebGet(UriTemplate = "/ GetTest2")]' 公共HttpResponseMessage GetTest2() 。OK); } – Spacetop

+0

私はWCF REST Service Application VSテンプレートが実際にWCF Web APIと互換性があるとは思わない。デフォルトでは、WCF Web APIはJSON/XMLを返し、DataContractSerializerは使用しません。 –

+0

正しいセットアップの正しい方向を教えてください。ありがとうございました。私はこれがWeb APIだったと仮定しました。なぜならSVCファイルがなくなったからです...これは私が使ったものです:http://visualstudiogallery.msdn.microsoft。COM/fbc7e5c1-a0d2-41bd-9d7b-e54c845394cd – Spacetop

答えて

0

なぜリストを返す必要がありますか<T>?配列を返すだけで大丈夫です。私は組み込みJSON-Serializerがリスト<T>を扱う方法を知っているとは思わない。リストとして行う方法を知らない合理的なことは、タイプの追加/削除を介して "編集可能"です。<T>

また、wcf-web-apiでdatacontract/member属性は必要ありません。

+0

ありがとうScott、私は装飾が必要ないと思った。他のプロジェクトではリストで動作することがわかりましたが、おそらく別のJSONシリアライザを使用していました。私は組み込みのXMLシリアライザを実際に使用しています。私はちょうど配列ににキャストしようとした – Spacetop

+0

..あなたが示唆するように私は配列をしようとしますが、私はクエリだDLLがリストを吐くと、クライアントはで動作するようにリストを必要とするので、それは私のための回避策のように思えますそれを返すと、上のリストと同じ正確なエラーが出ます。それはオブジェクト自体に問題があるようです。 – Spacetop

+0

私は "Antony"、申し訳ありません:) – Spacetop