【问题标题】:Data Contract for a JSON request with dynamic key names in WCFWCF 中具有动态键名的 JSON 请求的数据协定
【发布时间】: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&lt;string, string&gt; 就足够了。

我在Serve 方法中收到的MLWebRequest 已正确填充所有其他字段,但所有MLRequestItems 的context 字典包含零个元素。

我在 Windows 10 上使用 .NET 4.6。除了要求客户端先序列化子对象并将其发送给我之外,我想不出另一种方法来让它工作。任何帮助,将不胜感激。谢谢!

编辑:还尝试将上下文的数据类型更改为List&lt;KeyValuePair&lt;string, string&gt;&gt; - 也没有用。

【问题讨论】:

    标签: c# .net wcf


    【解决方案1】:

    最后有人告诉我,WCF 已经过时,不再维护,ASP.NET Core 2.0 是在 .NET 堆栈上托管服务的更现代的平台。

    事实证明,同一个 C# 类(在 ASP 中是 Model,而不是 Data Contract)运行时没有任何问题。

    设置ASP.NET 样板来发送和接收JSON 也容易得多,与WCF 相比,您必须切换一些神秘的配置标签,所以我强烈推荐ASP.NET Core 给任何阅读本文的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      相关资源
      最近更新 更多