接受对象数组的WCF OperationContract总是返回0的长度

时间:2014-01-15 17:36:26

标签: c# .net json wcf serialization

我的WCF服务上有以下OperationContract:

public int ProcessEntries(Entry[] entries)
{
    return entries.Length;
}

我的OperationContract的界面定义如下:

[OperationContract]
[WebInvoke(
    Method = "POST",
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json)]
int ProcessEntries(Entry[] entries);

Entry类的定义如下:

[DataContract]
public class Entry
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Name { get; set; }
}

我通过jQuery调用WCF服务的OperationContract,调用如下:

$.ajax({
    url: 'MyService.svc/json/ProcessEntries',
    type: 'POST',
    data: JSON.stringify({
        entries: [
            { Id: 1, Name: 'Test1' },
            { Id: 2, Name: 'Test2' }
        ]
    },
    contentType: 'application/json',
    success: function (d) { console.log(d); }
});

在Chrome开发者工具中,我看到我的请求有效负载如下:

{
    "entries": [
        {
            "Id": 1,
            "Name": "Test1"
        },
        {
            "Id": 2,
            "Name": "Test2"
        }
    ]
}

我希望回复为2,但我总是收到0的回复。

我在这里做错了什么?为什么我的OperationContract认为Entry数组的长度为0


编辑在调试模式下,我可以看到条目数组实际上是空的。为什么不通过反序列化请求中发送的JSON来获取条目?


最终修改我发现在我的BodyStyle = WebMessageBodyStyle.WrappedRequest属性中添加WebInvoke可以解决问题,但我不确定原因。任何人都可以回答这个问题吗?

0 个答案:

没有答案