stellus Ответов: 2

Ошибка отправки json в webmethod


Всем привет,
У меня возникли проблемы с отправкой JSON в веб-метод. Вот кстати, что я пытаюсь сделать это.
Если есть лучший способ сделать это, пожалуйста, дайте мне знать.
То, что я пытаюсь сделать, - это сохранить объект JSON в базе данных.

<script type="text/javascript">
						
function TEST() {
   var str = {
	'data' : [
       { "id" : "ajson1", "parent" : "#", "text" : "Simple"},
       { "id" : "ajson2", "parent" : "#", "text" : "Root"},
    ]
}

    $.ajax({
        type: "POST",
        url: "Default3.aspx/Test",
        data: str,
        //contentType: "plain/text",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            alert(msg.d);
        },
        error: function(e) {
            alert(e.responseText);
        }
    });
} 
						</script>

Code behind:

  [WebMethod]
    public static string Test(string Object)
    {
        return "success";
       // return "{data:data}";
    }



я получил следующее сообщение об ошибке,

---------------------------
Message from webpage
---------------------------
{"Message":"Invalid JSON primitive: data.","StackTrace":"   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n   at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}
---------------------------
OK   
---------------------------



заранее спасибо.

Что я уже пробовал:

Ошибка отправки JSON в WebMethod

F-ES Sitecore

Вероятно, вы не можете использовать "#" в качестве имени свойства.

Richard Deeming

Ошибка предполагает, что существует неправильное совпадение между JSON, который вы отправляете, и структурой класса, который ваш WebMethod пытается десериализовать. Как выглядит этот класс?

2 Ответов

Рейтинг:
1

mehul bhalala

попробуйте этот код


function TEST() {
        var str =JSON.stringify({

            data: [
                    {
                        id: "ajson1",
                        parent: "#",
                        text: "Simple"
                    },
                   {
                       id: "ajson2",
                       parent: "#",
                       text: "Root"
                   }
                 ]
        }

        $.ajax({
            type: "POST",
            url: "Default3.aspx/Test",
        data: str,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            alert(msg.d);
        },
        error: function (e) {
            alert(e.responseText);
        }
    });
}


stellus

Спасибо тебе Мехул,
я попробовал ваш код, но снова получил другое сообщение об ошибке ,
пожалуйста, найдите ниже мое сообщение об ошибке и код webmethod,

ошибка:
---------------------------
Сообщение с веб-страницы
---------------------------
{"Сообщение":"недопустимый вызов веб-службы, отсутствует значение параметра: \u0027Object\u0027.","Трассировка стека":" в системе.Веб.Сценарий.Услуги.WebServiceMethodData.CallMethod(Object target, IDictionary`2 parameters)\r\n at System.Web.Script.Услуги.WebServiceMethodData.Callmethod fromrawparams(Object target, IDictionary`2 parameters)\r\n at System.Web.Script.Услуги.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n at System.Web.Script.Услуги.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.Исключение InvalidOperationException"}
---------------------------
ОК
---------------------------


Мой код WebMethod таков:

[WebMethod]
публичный статический строковый тест(string Object)
{
возвращение "успеха";
// return "{data:данные}";
}

заранее спасибо