【发布时间】:2017-10-04 02:41:37
【问题描述】:
我正在尝试在 WCF 中创建一个 Web 服务,它将 POST 数据作为一个复杂的 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> 就足够了。
我在Serve 方法中收到的MLWebRequest 已正确填充所有其他字段,但所有MLRequestItems 的context 字典包含零个元素。
我在 Windows 10 上使用 .NET 4.6。除了要求客户端先序列化子对象并将其发送给我之外,我想不出另一种方法来让它工作。任何帮助,将不胜感激。谢谢!
编辑:还尝试将上下文的数据类型更改为List<KeyValuePair<string, string>> - 也没有用。
【问题讨论】: