Возврат сырых данных json (строка) в wcf

Я хочу создать свой собственный JSON и сделать, чтобы сервис возвратил строку, вот код

[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
public string GetCurrentCart()
{
    //Code ommited
    string jsonClient = null;
    var j = new { Content = response.Content, Display=response.Display, SubTotal=response.SubTotal};
    var s = new JavaScriptSerializer();
    jsonClient = s.Serialize(j);
    return jsonClient;
}

Ответ, который я получаю, содержит \", раньше создавал "в строках в c#.

Следующее является ответом.

"{\"Content\":\"\\r\\n\\u003cdiv\\u003e\\r\\n\\u003cinput type=\\\"hidden\\\" name=\\\"__VIEWSTATE\\\" id=\\\"__VIEWSTATE\\\" value=\\\"\/wEPDwUBMA9kFgJmD2QWAmYPZBYGAgMPFgIeBFRleHQFKFlvdSBoYXZlIG5vIGl0ZW1zIGluIHlvdXIgc2hvcHBpbmcgY2FydC5kAgUPFgIeB1Zpc2libGVoZAIHDxQrAAIPFgIfAWhkZGQYAQUMY3RsMDEkbHZDYXJ0D2dkoWijqBUJaUxmDgFrkGdWUM0mLpgQmTOe8R8hc8bZco4=\\\" \/\\u003e\\r\\n\\u003c\/div\\u003e\\r\\n\\r\\n\\u003cdiv class=\\\"block block-shoppingcart\\\"\\u003e\\r\\n    \\u003cdiv class=\\\"title\\\"\\u003e\\r\\n        \\u003cspan\\u003eShopping Cart\\u003c\/span\\u003e\\r\\n    \\u003c\/div\\u003e\\r\\n    \\u003cdiv class=\\\"clear\\\"\\u003e\\r\\n    \\u003c\/div\\u003e\\r\\n    \\u003cdiv class=\\\"listbox\\\"\\u003e\\r\\n        You have no items in your shopping cart.\\r\\n        \\r\\n        \\r\\n    \\u003c\/div\\u003e\\r\\n\\u003c\/div\\u003e\\r\\n\",\"Display\":\"You have no items in your shopping cart.\",\"SubTotal\":null}"

Значения правильно кодируются, но сам json правильно не отформатирован. Эти причина \это для выхода из ненормального.

Как я возвращаю строку без \перед "?

47
задан mihai 20 May 2016 в 04:36
поделиться

1 ответ

В настоящее время ваш веб-метод возвращает String вместе с ResponseFormat = WebMessageFormat.Json . Это следует за кодировкой строки JSON. Соответствует www.json.org, все двойные кавычки в строке будут экранированы с помощью обратной косой черты. Итак, у вас в настоящее время двойная кодировка JSON.

Самый простой способ вернуть данные любого типа - изменить тип вывода веб-метода GetCurrentCart () на Stream или Message ] System.ServiceModel.Channels ) вместо String .
См. http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-web.aspx , http: // msdn. microsoft.com/en-us/library/ms789010.aspx и http://msdn.microsoft.com/en-us/library/cc681221 (VS.90) .aspx для примеров кода. .

Поскольку вы не указали в своем вопросе, какую версию .NET вы используете, я предлагаю вам использовать универсальный и самый простой способ:

public Stream GetCurrentCart()
{
    //Code ommited
    var j = new { Content = response.Content, Display=response.Display,
                  SubTotal=response.SubTotal};
    var s = new JavaScriptSerializer();
    string jsonClient = s.Serialize(j);
    WebOperationContext.Current.OutgoingResponse.ContentType =
        "application/json; charset=utf-8";
    return new MemoryStream(Encoding.UTF8.GetBytes(jsonClient));
}
109
ответ дан 7 November 2019 в 13:04
поделиться
Другие вопросы по тегам:

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