[英]Data Contract for a JSON request with dynamic key names in WCF
我正在尝试在WCF中创建一个Web服务,该服务将POST数据(一个复杂的JSON对象)作为POST数据,其中一部分是带有动态键的子对象。 例如,
{
"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);
这对我不起作用。 我看了一下这个答案: 复杂JSON对象的C#数据协定
从我的一个答案看来,如果我知道我的JSON对象不包含重复键,那么Dictionary<string, string>
就足够了。
我在Serve
方法中收到的MLWebRequest
具有正确填充的所有其他字段,但是所有MLRequestItem
的context
字典包含零个元素。
我在Windows 10上的.NET 4.6上,我想不出另一种方法使它无法正常工作,而无需要求客户端先序列化子对象并将其发送给我。 任何帮助,将不胜感激。 谢谢!
编辑 :还试图将上下文的数据类型更改为List<KeyValuePair<string, string>>
-也不起作用。
最终有人通知我WCF已经过时了,不再维护了,而ASP.NET Core 2.0
是一个更现代的平台,可以在.NET堆栈上托管服务。
事实证明这是真的,并且相同的C#类(按ASP的说法是Model
,而不是Data Contract
)在没有任何配合的情况下工作。
与必须切换一些神秘配置标签的WCF相比,设置ASP.NET
样板发送和接收JSON还容易得多,因此,我强烈建议阅读此书的人使用ASP.NET Core
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.