2017-09-29 8 views
0

WCFで複雑なJSONオブジェクトであるPOSTデータを取得するWebサービスを作成しようとしていますが、その一部は動的キーを持つサブオブジェクトです。たとえば、WCFで動的キー名を使用したJSONリクエストの契約

{ 
    "documents": [{ 
     "ID": "reqOne", 
     "context": { 
      "source": "data1", 
      "user": "data2", 
      "eventName": "data3" 
     }, 
     "data": ["1", "2", "3"] 
    },{ 
     "ID": "reqTwo", 
     "context": { 
      "source": "data1", 
      "user": "data2", 
      "date": "data3" 
     }, 
     "data": ["abc", "def", "ghi"] 
    }] 
} 

これは私のデータ契約の様子です。

[DataContract] 
public class MLWebRequest 
{ 
    [DataMember] 
    public List<MLRequestItem> documents; 
} 

[DataContract] 
public class MLRequestItem 
{ 
    [DataMember] 
    public string ID; 

    [DataMember(Name = "context", IsRequired = true)] 
    public Dictionary<string, string> context { get; set; } 

    [DataMember] 
    public List<string> data; 
    public MLRequestItem() 
    { 
     context = new Dictionary<string, string>(); 
     data = new List<string>(); 
    } 
} 

これは、特定のリクエストに対する私のインターフェースの定義方法です。

[WebInvoke(Method = "POST", 
    BodyStyle = WebMessageBodyStyle.Bare, 
    RequestFormat = WebMessageFormat.Json, 
    ResponseFormat = WebMessageFormat.Json)] 
[OperationContract] 
MLWebResponse Serve(MLWebRequest request); 

これは私にとっては機能しません。私はこの答えを見て撮影した: C# data contract for complex JSON object

そして、それは私が私のJSONオブジェクトが重複キーが含まれていないことがわかっている場合Dictionary<string, string>は十分なはずの答えの1から私には思えます。 Serve方法で私が受け取る

MLWebRequestが正しく読み込ま他のすべてのフィールドを持っていますが、すべてのMLRequestItem秒のcontext辞書はゼロ要素が含まれています。

私は.NETの.NET 4.6をWindows 10に搭載しています。クライアントにサブオブジェクトを最初にシリアル化して送ってもらうために、これを行うには別の方法があります。どんな助けもありがとう。ありがとう!

編集:コンテキストのデータ型をList<KeyValuePair<string, string>>に変更しようとしました。これも機能しませんでした。

答えて

0

最終的に、WCFが古く、メンテナンスされていないことをお伝えしました。ASP.NET Core 2.0は、.NETスタック上でサービスをホストするためのより最新のプラットフォームです。

真実であり、同じC#クラス(それはData Contractではなく、ASP用語でModelであり、適合していません)はうまくいきました。

あなたには、いくつかの難解な設定タグをトグルする必要がWCFに比べて、またJSONsを送受信するASP.NET定型を設定することが非常に簡単ですので、私は非常にこれを読んで誰にもASP.NET Coreをお勧めします。

関連する問題