2014-02-11 2 views
1

Я звоню в asmx webservice, который возвращает json (msg.d), который потребляется должным образом knockout.js. Когда я пытаюсь вернуть идентичный json в asmx, я получаю сообщения об ошибках. Есть ли что-то очевидное, что мне не хватает? ... msg.d - это хорошо сформированный массив объектов.asmx round trip json

storeGroupCategories(msg.d); вызова возвращает ошибку WebService ...

{ "Сообщение": "Invalid JSON примитивными: Детские + Книги."

вызова storeGroupCategories(msg); возвращается ошибка вебсервис ...

{ "Сообщение": "Invalid JSON примитивно: d."

WebService

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\"} 
+0

Возможно, вам нужно установить тип ответа на JSON http://stackoverflow.com/questions/211348/how-to-let-an-asmx-file-output-json – MattC

ответ

0

Для начала я думаю, что вам нужно, чтобы передать ваши json вот так:

storeGroupCategories(msg.d) 

Но внутри этой функции вы также должны создать действительные параметры JSon к сообщению, которое будет выглядеть следующим образом:

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

Я также хотел бы изменить свою подпись к следующему, так группа совпадает с аргумент вы передаете через:

public GroupGuid StoreGroupCategories(List<InExCategory> groups) 

Если поставить точку останова в методе веб-страницы, вы увидите именно то, что встретив, и убедитесь, что это то, что вы ожидаете.

+0

Спасибо ... Я дам это выстрел. Я новичок в asmx & json. – BedfordNYGuy

+0

По-прежнему возникала ошибка, когда я добавлял JSON.stringify к объекту в вызове getJsonData (_url, "StoreGroupCategories", "{inExCategories:" + JSON.stringify (groupCategories) + "}"); У меня есть более простая ошибка .... ":" Неверный вызов веб-службы, отсутствующее значение для параметра: \ u0027groups \ u0027. "," – BedfordNYGuy

+0

Вам не нужно стягивать, просто попробуйте его. – hutchonoid

Смежные вопросы