【问题标题】:asmx round trip jsonasmx 往返 json
【发布时间】:2014-03-08 14:45:26
【问题描述】:

我正在调用一个 asmx 网络服务,它返回 json (msg.d),由 knockout.js 正确使用。当我尝试将相同的 json 返回到 asmx 时,我收到错误消息。我有什么明显的遗漏吗? ... msg.d 是一个格式良好的对象数组。

调用storeGroupCategories(msg.d);返回webservice错误...

{"Message":"无效的 JSON 原语:Baby+Books。"

调用 storeGroupCategories(msg); 返回 web 服务错误 ...

{"Message":"无效的 JSON 原语:d。"

网络服务

public class kbo_inexcludecategories : WebService
{

    [WebMethod]
    public List<Group> GetIncludeExcludeJson()
    {
        var Groups =  new List<Group>();
        ShopAssistGroupHandler.getInExCategories(Groups);
        return Groups;
    }

    [WebMethod]
    public GroupGuid StoreGroupCategories(List<InExCategory> inExCategories)
    {
        var inExString = JsonConvert.SerializeObject(inExCategories);
        var returnGuid = DataHandler.SaveGroupJsonString(inExString);
        return new GroupGuid(returnGuid);
    }
}

关联的json ...

var _url = "kbo-inexcludecategories.asmx/";
var _method = "GetIncludeExcludeJson";
var _jsonData = "{}";

function storeGroupCategories(groupCategories) {
    if(groupCategories != ""){
        showProgressBar("Storing Group Categories");
        getJsonData(_url, "StoreGroupCategories", groupCategories);
    }
}

function getGroupMatrix() {
    showProgressBar("Loading Group Categories");
    getJsonData(_url, _method, _jsonData);
}

function getJsonData(url, method, jsonData) {
    var myUrl = url + method;
    $.ajax({
        type: "POST",
        url: myUrl,
        data: jsonData,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false, //blocks window close
        success: onSuccess,
        error: onError
    });
}

function onSuccess(msg) {

    // Hide the fake progress indicator graphic.
    hideProgressBar("");
    if(msg.d.hasOwnProperty("Guid")) {
        saveGroupGuid(msg.d);
    }
    else {
        storeGroupCategories(msg.d);
        //showGroupAccordion(msg.d);
        //OpenAdvancedDialog();
    }
}

json 示例 ...

"{\"groups\":[{\"__type\":\"group\",\"id\":1488,\"name\":\"Baby Books\",\"categories\":
[{\"__type\":\"groupcategory\",\"id\":152,\"name\":\"Activity Books\",\"value\":\"Included\"},
{\"__type\":\"groupcategory\",\"id\":167,\"name\":\"Bedtime and Dreams\",\"value\":\"Excluded\"}

【问题讨论】:

标签: c# asp.net json knockout.js asmx


【解决方案1】:

首先,我认为您需要像这样传递您的 json:

storeGroupCategories(msg.d)

但在此函数中,您还需要为帖子创建有效的 json 参数,如下所示:

getJsonData(_url, "StoreGroupCategories", "{ inExCategories: " + groupCategories + " }");

我还将您的签名更改为以下内容,因此组与您传递的参数相匹配:

public GroupGuid StoreGroupCategories(List<InExCategory> groups)

如果您在网页方法中设置断点,您将准确看到遇到的情况,并检查它是否符合您的预期。

【讨论】:

  • 谢谢...我会试一试。我是 asmx 和 json 的新手。
  • 仍然有错误,当我在调用 getJsonData(_url, "StoreGroupCategories", "{ inExCategories: " + JSON.stringify(groupCategories) + " }");我遇到了一个更简单的错误 .... ":"无效的 Web 服务调用,参数缺失值:\u0027groups\u0027。","
  • 你不应该需要字符串化,直接试试吧。
  • 我先这样做并得到了... {"Message":"Invalid JSON primitive: object
  • 好的,在发送之前一定有某种 json 序列化问题。您可以调试并检查它是否类似于: data: '{"groups":[{"__type\":"group","id":1488,"name":"Baby Books","categories": [ {"__type":"groupcategory","id" ...'
猜你喜欢
  • 2010-12-26
  • 2014-01-17
  • 1970-01-01
  • 2019-08-07
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2016-10-27
相关资源
最近更新 更多