На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Ошибка десериализации JSON в ASP.NET , при использовании jQuery Validation Engine
    Всем привет!

    На форме есть поле, которое нужно валидировать запросом на сервер. Используем jQuery Validation Engine, прописал класс:
    ExpandedWrap disabled
                      "ajaxFieldFree": {
                          "url": "WebService/UserCheck.asmx/IsLoginFree",
                          "method": "post",
                          "data": "json",
                          "extraData": "user_id=test",
                          "alertText": "* Этот логин уже занят",
                          "alertTextOk": "* Этот логин свободен",
                          "alertTextLoad": "* Проверка, подождите..."
                      }


    Данные летят такие:
    ExpandedWrap disabled
      {fieldId:'user_2687_2',fieldValue:'eu\qqq',extraData:'user_id=test'}


    Соот-но, ASP.NET падает с ошибкой из-за "\" в строке:
    ExpandedWrap disabled
      "Unrecognized escape sequence. (39): {fieldId:'user_2687_2',fieldValue:'eu\qqq',extraData:'user_id=test'}"
       
          
      StackTrace
          
       
      "   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.AppendCharToBuilder(Nullable`1 c, StringBuilder sb)
       
         at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeString()
       
         at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
       
         at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)
       
         at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
       
         at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
       
         at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
       
         at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)
       
         at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)
       
         at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)
       
         at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)"


    Что ему, блин, надо? :(

    Добавлено
    Метод на сервере оформлен так:
    ExpandedWrap disabled
              [WebMethod(true)]
              [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
              public object[] IsCompanyFieldAllowed(string fieldId, string fieldValue, string extraData)
              {
                  return new object[] {fieldId, false};
              }
      HttpEncode/HttpDecode не спасет?
        Цитата deil @
        Соот-но, ASP.NET падает с ошибкой из-за "\" в строке:


        А удвоить пробовал?

        ExpandedWrap disabled
          fieldValue:'eu\\qqq'
          Цитата kosten @
          HttpEncode/HttpDecode не спасет?

          Где? До серверного кода не доходит

          Добавлено
          Цитата Vladimir @
          Цитата deil @
          Соот-но, ASP.NET падает с ошибкой из-за "\" в строке:


          А удвоить пробовал?

          ExpandedWrap disabled
            fieldValue:'eu\\qqq'

          Если удвоить - работает. Но этот запрос генерируется автоматически, поэтому удвоить перед отправкой не получится.

          Добавлено
          Так. Судя по стандарту, "\" действительно должен быть экранирован. Значит, вопрос не к ASP.NET, а к jQuery! Блин.
            Ошибка была в коде плагина, он генерил JSON без экранирования служебных символов.
              Цитата deil @
              {fieldId:'user_2687_2',fieldValue:'eu\qqq',extraData:'user_id=test'}

              Дело в том, что это не JSON
              ExpandedWrap disabled
                {'fieldId':'user_2687_2','fieldValue':'eu\qqq','extraData':'user_id=test'}

              А вот это JSON, в JSON имя параметра так же должно быть в кавычках. Да, в JS работает парсинг, а вот при использовании других инструментов может и не взлететь без имя параметра без кавычек.
                Цитата Axis @
                А вот это JSON

                это тоже не джейсон, на сам деле кавычки должны быть, а не апострофы
                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0471 ]   [ 15 queries used ]   [ Generated: 18.05.24, 03:05 GMT ]