wcf - 在 wcf 中返回原始 json(字符串)

我想构建自己的 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 本身的格式不正确。这些\'s 导致它变得异常。

我如何返回一个字符串,在 "'s 前面没有\'s?

最佳答案

当前,您的 Web 方法返回 StringResponseFormat = WebMessageFormat.Json。因此,您的代码将使用字符串的 JSON 编码。对应json.org ,这意味着字符串中的所有双引号都将使用反斜杠进行转义。所以你目前有双重 JSON 编码。

返回任何类型数据的最简单方法是将 GetCurrentCart() Web 方法的输出类型更改为 StreamMessage (来自 System.ServiceModel.Channels)而不是 String

有关代码示例,另请参阅...

  • Carlos Figueira MSDN 博客文章,'WCF "Raw" programming model ',
  • MSDN 的“How to: Enable Streaming”,以及
  • MSDN 的“How to: Create a Service That Returns Arbitrary Data Using The WCF REST Programming Model”。

因为您没有在问题中包含您使用的 .NET 版本,我建议您使用通用(也是最简单)的方式:

public Stream GetCurrentCart()
{
    //Code ommitted
    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));
}

https://stackoverflow.com/questions/3078397/

相关文章:

python - python中的 pretty-print json(pythonic方式)

c# - 判断 Json 结果是对象还是数组

python - 在 Python 中将 JSON 转换为字符串

json - 如何从 nginx 生成 JSON 日志?

php - 带有双引号的json解析错误

java - 在 Java 中将 JSON 转换为 XML

java - Retrofit2 安卓 : Expected BEGIN_ARRAY but was

jquery - 如何获取 JSON 键和值?

json - 将导入的 json 数据导入数据框

ios - Swift读取远程通知的userInfo