繁体   English   中英

WCF中具有动态键名的JSON请求的数据协定

[英]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具有正确填充的所有其他字段,但是所有MLRequestItemcontext字典包含零个元素。

我在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM