【问题标题】:No parameterless constructor defined when POST request in JSON Content Type with ASMX Web Service使用 ASMX Web 服务以 JSON 内容类型发布请求时未定义无参数构造函数
【发布时间】:2016-03-29 13:30:33
【问题描述】:

作为标题,

当我使用 fiddler 测试页面时 -

http://localhost:59583/JSONtest.asmx/Test 内容类型:应用程序/json;字符集=utf-8

我的请求正文是

{"header":{"sig":"abcdefg","timestamp":"2016-03-25T04:25:09.8395853Z"}}

它将响应此错误消息: 没有为 \u0027System.String\u0027 类型定义无参数构造函数

但如果我把 JSON 格式加上反斜杠:

{"header":"{\"sig\":\"abcdefg\",\"timestamp\":\"2016-03-25T04:25:09.8395853Z\"}"}

响应将显示我想要的正确结果。

如何插入不带反斜杠的 JSON 格式?

这是我的 asmx 代码。

    [WebMethod]
    [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
    public string Test(string header)
    {
        return header;
    }

【问题讨论】:

    标签: c# json web-services asmx


    【解决方案1】:

    这是因为您的第一个 sn-p 中的 "header" 是一个具有属性的类,而不是您的代码中的单个 string。在我看来,错误消息只是令人困惑。

    第二个 sn-p 确实只有一个 string 作为 "header" 的值,所以这很好。如果你真的想让"header" 成为一个对象,你必须为它创建一个单独的类才能正确序列化它。

    【讨论】:

    • 你能举个例子吗?不是很懂
    • 你的第一个 header 不是字符串,所以你不能这样序列化它。另一个是因为它被正确地转义了。
    • 假设我需要在其中插入 2 个具有许多数组值的参数:string headerstring body 然后我必须插入标题 {"sig":"eeewrewre","timestamp":"2014-01-01T10:11:12Z"} 和正文 {"payerbanknum":"34434","payerbankname":"testbank"} 的值 如何在 fiddler 中输入请求正文?
    • 然后创建字典。
    • 你的意思是我必须做这样的事情? link
    【解决方案2】:

    在发送 Ajax 发布请求之前,您可以将标头对象及其值包装在 JSON.stringify() 中

    var myHeader = {"header":JSON.stringify(headerValue)};
    var myParams = JSON.stringify(myHeader);
    

    然后您可以将 myParams 变量作为数据参数发送到 ajax 请求中

    $.ajax('url',data:myParams  .....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-08
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多