WCF + Json = неправильная сериализация - PullRequest
3 голосов
/ 02 февраля 2010

Почему этот метод WCF 3.5

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Json
{
    [OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Json)]
    public string Upper(string text)
    {
        return text.ToUpper();
    }
}

возвращает {"d":"TEXT"}?

Возвращается {"TEXT"}

Я звоню, используя jQuery.

    $("#upper").click(function() {
        $.ajax({
            type: "GET",
            url: "/Json.svc/Upper?text="+$("#input1").val(),
            success: function(data) {
                $("#input1").val(data.d);
            }
        });
    });

Ответы [ 3 ]

8 голосов
/ 03 февраля 2010

Это функция безопасности, которая была добавлена ​​в сериализацию JSON в .NET 3.5. Это контейнерный объект, поэтому вместо, скажем, results[0], вы бы просто сказали results.d[0]. Прочитайте эту статью для получения дополнительной информации.

1 голос
/ 03 июня 2011

Я предполагаю, что вы используете <enableWebScript/> в своей конфигурации поведения, замените его на <webHttp defaultOutgoingResponseFormat="Json"/>, и вы получите json без корня "d" и без реквизитов "__type".

Тем не менее, я только что проверил это в 4.0

Я также не использую никаких атрибутов в коде.

0 голосов
/ 03 февраля 2010

Вы пытались изменить свойство BodyStyle вашего атрибута [WebGet], чтобы ответы не переносились?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...