ASP.NET WebService Переносит мой ответ JSON с XML-тэгами

Я не уверен, куда я иду неправильно того, что я пропускаю.

Я создаю ASP.NET 2.0 (на платформе.Net 3.5) веб-приложение, и я включаю веб-сервис. Обратите внимание, что это не проект MVC. Я хочу выставить метод, который возвратит строку JSON; отформатированный для питания плагина jqGrid jQuery.

Это - предварительный метод тестирования, который я реализовал в своем сервисе: благодаря (Руководство Phil Haack для MVC)

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string getData()
{
    JavaScriptSerializer ser = new JavaScriptSerializer();

    var jsonData = new
    {
        total = 1, // we'll implement later 
        page = 1,
        records = 3, // implement later 
        rows = new[]{
          new {id = 1, cell = new[] {"1", "-7", "Is this a good question?", "yay"}},
          new {id = 2, cell = new[] {"2", "15", "Is this a blatant ripoff?", "yay"}},
          new {id = 3, cell = new[] {"3", "23", "Why is the sky blue?", "yay"}}
        }
    };

    return ser.Serialize(jsonData); //products.ToString();
}

При вызове это возвращается (отформатированный для ясности):

 

{
  "total":1,
  "page":1,
  "records":3,
  "rows":
    [
      {"id":1,"cell":["1","-7","Is this a good question?","yay"]},
      {"id":2,"cell":["2","15","Is this a blatant ripoff?","yay"]},
      {"id":3,"cell":["3","23","Why is the sky blue?","yay"]}
    ]
}
 

Как я достиг бы вышеупомянутого ответа без xml переносов?

12
задан Stephen Kennedy 6 June 2015 в 09:22
поделиться

3 ответа

Эта статья, похоже, использует тот же код:

http://toolmantim.com/articles/bangbang_your_nil_is_dead

в основном, похоже, он просто предназначен для применения оператора не (!) Дважды - по сути принудительно Способ возвращения True или False вместо True, False или Nil.

То есть, если @Current_user - это nil, вызывая

def logged_in?
  @current_user()
end

вернет Nil. Изменение его в (Single Bang)

def logged_in?
  !@current_user()
end

вернется истина и меняется дальше (двойной взрыв)

def logged_in?
  !!@current_user()
end

, вернет ложь - что более применимо (и пригоднее), чем NIL.

Еще один способ написать это было бы:

def logged_in?
  !@current_user().nil?
end

, но это не охватывает дело, когда @Current_user неверно, и я думаю, что !! приятнее смотреть на.

-121--3036614-

«:» - это проведение от сегментированных дней памяти, когда ПК пробежал в реальном режиме и может сделать только 64K одновременно. Номер слева от «:» - это ваш сегмент, номер справа - ваш адрес.

Команда Debug Windows принимает это обозначение, если вы хотите расти в памяти самостоятельно:

C:\Users\Seth> debug
-d0000:7c00
0000:7C00  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:7C10  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:7C20  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:7C30  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:7C40  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:7C50  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:7C60  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:7C70  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................

Что касается этого конкретного адреса, это просто адрес, который был выбран для загрузки MBR, см.: http: / /www.ata-atapi.com/hiwmbr.html

" Если найден MBR, он читается в память в местоположении 0000: 7C00 и INT 19 прыжки на память 0000: 7C00 "

-121--2771334-

Три вещи, которые вы не можете делать:

  • Маркировка статического метода
  • , выполняющее пост
  • , ручной пустой «{}» для данных в jQuery.

Может быть способ вызвать метод с получением, я только использовал пост. Я смог получить ваш пример работы с этим:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script>
    // In your javascript block
    $(document).ready(function()
    {
        $.ajax({
            url: "/Default.aspx/Tester",
            type: "POST",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: "{}",
            success: done
        });
    });

    function done(data)
    {
        // Include http://www.json.org/json2.js if your browser doesn't support JSON natively
        var data = JSON.parse(data.d);
        alert(data.total);
    }
</script>

код позади (вам не нужно создавать веб-сервис, вы можете поставить это по умолчанию .aspx):

[WebMethod]
public static string Tester()
{
    JavaScriptSerializer ser = new JavaScriptSerializer();

    var jsonData = new
    {
        total = 1, // we'll implement later 
        page = 1,
        records = 3, // implement later 
        rows = new[]{
              new {id = 1, cell = new[] {"1", "-7", "Is this a good question?", "yay"}},
              new {id = 2, cell = new[] {"2", "15", "Is this a blatant ripoff?", "yay"}},
              new {id = 3, cell = new[] {"3", "23", "Why is the sky blue?", "yay"}}
            }
        };

    return ser.Serialize(jsonData); //products.ToString();
}

Результат:

{"d":"{\"total\":1,\"page\":1,\"records\":3,\"rows\":[{\"id\":1,\"cell\":[\"1\",\"-7\",\"Is this a good question?\",\"yay\"]},{\"id\":2,\"cell\":[\"2\",\"15\",\"Is this a blatant ripoff?\",\"yay\"]},{\"id\":3,\"cell\":[\"3\",\"23\",\"Why is the sky blue?\",\"yay\"]}]}"}

A больше Подробное объяснение здесь

8
ответ дан 2 December 2019 в 07:02
поделиться

В вашем коде не «верните» JSON. Используйте вместо этого:

Context.Response.Write (SER.Serialize (JSondata));

Тогда вы будете хорошими.

Команда регулярного возврата помогает вы, поместив более правильный формат обслуживания. Некоторые сказали бы, что это будет лучшая форма, чтобы использовать это, и развернуть свой JSON на клиенте из этого формата. Я говорю, просто выплюните вещи именно, как вы хотите его использовать!

9
ответ дан 2 December 2019 в 07:02
поделиться

Когда вы отмечаете службу в качестве Scraptservice, он автоматически обрабатывает сериализацию JSON. Вы не должны вручную сериализировать ответ. См. Это Запись переполнения стека для более подробной информации.

2
ответ дан 2 December 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: