2016-10-13 10 views
0

WCFの新機能です。 wcfで辞書のリストを返そうとしています。WCFの辞書一覧

ここに私のコードです。

public class Service1 : IService1 
{ 
    public List<Dictionary<string, object>> GetData(string query) 
    { 
      List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>(); 
      ... 
      ... 
      return rows; 
    } 

} 

public interface IService1 
{ 
    [WebGet()] 
    [OperationContract] 
    List<Dictionary<string, object>> GetData(); 
} 

リターン文字列を返すと正常に動作します。このようなリストを返したいと思います。

+0

いいえ、私は、ブラウザ側で任意のエラーを取得していないが、任意の結果を取得しておりません。 –

+0

オペレーション契約でオブジェクトを返さないでください。代わりに、Interfaceを定義し、ServiceKnownType属性を使用して、サービスの境界で公開される実装のセットを定義します。可能であれば、@TomRedfern –

+0

この例を教えてください。 –

答えて

1

クラスを作成し、属性KnownTypeを設定する必要があります。

[DataContract] 
[KnownType(typeof(List<Dictionary<string, object>>))] 
public class Foo 
{ 
    [DataMember] 
    public IDictionary<String, Object> Inputs { get; set; } 
} 

は今の代わりにList<Dictionary<string, object>>使用List<Foo> あなたは、このサンプルのように行うことができます。

IService

 [OperationContract] 
    [WebInvoke(Method = "GET", 
    ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Bare, 
    UriTemplate = "GetData")] 
    List<Foo> GetData(); 

サービス

public List<Foo> GetData() 
    { 
     List<Foo> rows = new List<Foo>(); 
     var x = new Dictionary<string, object>(); 
     x.Add("sss","sss"); 
     x.Add("zzz", "zzz"); 
     x.Add("aaa", "aaa"); 
     var z = new Foo(); 
     z.Inputs = x; 

     rows.Add(z); 
     rows.Add(z); 
     return rows; 
    } 

enter image description here

+0

そのタイプのWCfはこのタイプをサポートしていません。 –

+0

私はそれをテストし、それが動作します。 Btwをクリックすると結果の画像が表示されます。どのタイプがあなたの意見でサポートされていませんか? –

関連する問題