asp.net - WCF RESTful JSON Web 服务发布对象的嵌套列表

标签 asp.net json wcf

我正在开发一个接受 JSON 参数的 WCF 服务。我不知道我哪里出了问题。请帮忙。

当我使用 fiddler 测试服务时,我发布以下内容:

"locations": {
        "Departments": [{
            "Name": "Amazonas",
            "alias": "",
            "Municipalities": [{
                "Name": "El Encanto"
            }, {
                "Name": "La Chorrera"
            }]

        }]
    }

我收到 400 错误:“服务器在处理请求时遇到错误。异常消息是“OperationFormatter 遇到无效的消息正文。期望找到名称为“type”、值为“object”的属性。找到值'字符串'。'。有关更多详细信息,请参阅服务器日志。”

堆栈跟踪是:

    at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeBodyContents(Message message, Object[] parameters, Boolean isRequest)
   at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeRequest(Message message, Object[] parameters)
   at System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest(Message message, Object[] parameters)
   at System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest(Message message, Object[] parameters)
   at System.ServiceModel.Dispatcher.CompositeDispatchFormatter.DeserializeRequest(Message message, Object[] parameters)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

这是契约(Contract):

 [OperationContract(Name = "setFacilities")]
    [WebInvoke(
        Method = "POST",
        BodyStyle = WebMessageBodyStyle.WrappedRequest,
        ResponseFormat = WebMessageFormat.Json,
        RequestFormat = WebMessageFormat.Json,
        UriTemplate = "/setFacilities")]
    string SetFacilities(LocationData locations);

[更新]

这是 LocationData 类

    [Serializable]
public class LocationData
{
    public IList<Department> Departments;
}

[Serializable]
public class Department
{
    public string Name;
    public string Alias;
    public IList<Municipality> Municipalities;
}

[Serializable]
public class Municipality
{
    public string Name;
}

我错过了什么?

最佳答案

问题出在你的 JSON 上。

您尚未共享 LocationData 类,因此我无法告诉您它必须是什么样子,但您的 JSON 需要用括号括起来:

{
    "locations": {
        "Departments": [{
            "Name": "Amazonas",
            "alias": "",
            "Municipalities": [{
                "Name": "El Encanto"
            }, {
                "Name": "La Chorrera"
            }]

        }]
    }
}

我猜 LocationData 实际上是有 Departments 的数据,所以我认为 "locations": 是多余的:

{

    "Departments": [{
        "Name": "Amazonas",
        "alias": "",
        "Municipalities": [{
            "Name": "El Encanto"
        }, {
            "Name": "La Chorrera"
        }]

    }]
}

关于asp.net - WCF RESTful JSON Web 服务发布对象的嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5084239/

相关文章:

c# - LoadControl,WebMethod 中的用户控件

c# - 图像未使用 Asp.Net 从 MySql 数据库中显示

javascript - JSON+Javascript/jQuery。如何从json文件导入数据并解析?

asp.net - 暂存应用程序错误 : App staging failed in the buildpack compile phase in HWC Buildpack

javascript - 如何使用 React 获取响应 header 中的 x-auth 值?

php - AJAX、JSON 对象 404

c# - 我如何在 wcf 服务中拥有 session ID

wcf - 将具有 Web 角色的 WCF 服务部署到非 Azure 托管

c# - 如何检查 Stream.Null?

javascript - 如何在ASP.NET中动态添加数据库数据到Jquery控件?