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>>
に変更しようとしました。これも機能しませんでした。