【问题标题】:sending Json array failed发送 Json 数组失败
【发布时间】:2011-05-05 14:36:57
【问题描述】:

我正在构建一个 JSON/WCF 应用程序,需要将一组对象发送回服务器。由于某种原因,它不接受数组。使用脚本管理器我可以很好地获取数据。

  var month = $("#ddlStartMonth").val();
            var year = $("#ddlStartYear").val();
            var items = JSON.stringify(calendarItems);
            WebService.SaveCalendar(items, new Date(year, month, 01).toDateString(), new Date(year, month, 01).toDateString(), Submit, onPageError);

我尝试过使用和不使用 JSON stringify。 onPageError 函数被激活,它产生的唯一错误信息是“服务器方法'SaveCalendar'失败”。然而web方法第一行的断点没有被激活。

    <OperationContract()>
<WebGet(ResponseFormat:=WebMessageFormat.Json, BodyStyle:=WebMessageBodyStyle.WrappedRequest)>
<WebMethod(EnableSession:=True)>
    Public Function SaveCalendar(ByVal _jsonImages As String()(), ByVal _selectedMonth As String, ByVal _selectedYear As String) As Boolean
        Dim _calenderItems As New List(Of CalenderItem)
        '_calenderItems = New JavaScriptSerializer().Deserialize(Of List(Of CalenderItem))(_jsonImages)
        HttpContext.Current.Session("calenderItems") = _calenderItems
        HttpContext.Current.Session("selectedMonth") = New Date(_selectedMonth)
        HttpContext.Current.Session("selectedYear") = New Date(_selectedYear)
        Return True
    End Function

有什么想法吗?

【问题讨论】:

  • 顺便说一句,wcf 服务返回的状态码是 400

标签: asp.net wcf json scriptmanager


【解决方案1】:

我在使用 MVC 时遇到过类似的问题。我认为 .NET 的反序列化器实际上期望它传递的对象将是 JSON object 而不是 array (即它应该始终以“{”开头并以“ }"。你可以:

  1. 创建一个 POCO 类来充当您的 DTO,其中仅包含一个 CalenderItems 列表/数组,或者
  2. 使用更“宽松”的反序列化器,例如 Newtonsoft 的 JSON.NET

当然,只有当您能够以某种方式说服 WCF 首先运行该方法时,第二个选项才有效。不过,再次查看您的代码,我想知道您将 _jsonImages 声明为双字符串数组是否会造成一些困难。

【讨论】:

  • +1 因为 JSON.NET 曾帮助我解决过此类问题。
  • 我首先尝试将 _jsonImages 声明为非数组字符串。这些解决方案都不起作用,我也尝试添加“{”并以“}”结尾,但没有效果。
  • 我添加尝试发送一个对象而不是一组对象,它可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
  • 2020-07-28
  • 2020-10-15
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多