C#WCF JSON返回字符串

C#WCF JSON返回字符串,c#,json,wcf,C#,Json,Wcf,我创建了一个简单的WCF服务,他工作得很好。 配置如下所示 接口具有此配置 [OperationContract] [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "checkSymbol

我创建了一个简单的WCF服务,他工作得很好。 配置如下所示 接口具有此配置

   [OperationContract]
    [WebInvoke(Method = "GET",
                  ResponseFormat = WebMessageFormat.Json,
                  BodyStyle = WebMessageBodyStyle.Bare,
                  UriTemplate = "checkSymbolExistJson/{pSymbol}")]
     string checkSymbolExistJson(string pSymbol);
实现是这样的

         public string checkSymbolExistJson(string pSymbol)
      {
            Person p    = new Person();
            p.name      = pSymbol;
            p.age       = 15;

        string json = JsonConvert.SerializeObject(p);
        return json;
      }
如果我在浏览器“”中的浏览器“”中输入URL,我将在浏览器“”中得到此结果

{\'name\':\'testename\',\'age\':15}

在我制作了一个win32应用程序来获取这个WCF服务的http结果之后。 我使用此代码读取HTML页面

        public string readUrl(string pUrl)
    {
        WebClient client = new WebClient { Encoding = System.Text.Encoding.UTF8 };
        return client.DownloadString(pUrl);
    }
我使用此代码读取JSON dinamic标记

       private void button2_Click(object sender, EventArgs e)
    {

         string tmpToken = readUrl(url.Text);
        // string tmpToken = "{\"name\":\"testename\",\"age\":15}";
        JToken token = JObject.Parse(tmpToken);

              string page = (string)token.SelectToken("name");
              jSONResult.Text = page;

    }
如果我运行上面的代码和下面的固定代码

字符串tmpToken=“{\'name\':\'testename\',\'age\':15}”

结果是正确的,我得到的结果是“testename”

但是当我调试ReadaHTML页面时,我收到了带有这个字符串的tmpToken值

“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

当我读取name的dinamic值时,我得到了一个错误

Newtonsoft.Json.dll中发生类型为“Newtonsoft.Json.JsonReaderException”的未处理异常

其他信息:从JsonReader读取JObject时出错。现在的 JsonReader项不是对象:字符串。路径“”,第1行,位置 37

如果我更改接口以返回如下代码所示的XML页面

       [OperationContract]
     [WebInvoke(Method = "GET",
                  ResponseFormat = WebMessageFormat.Xml,
                  BodyStyle = WebMessageBodyStyle.Bare,
                  UriTemplate = "checkSymbolExistJson/{pSymbol}")]
     string checkSymbolExistJson(string pSymbol);
我在浏览器中得到以下结果

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">{"name":"testename","age":15}</string>
{“姓名”:“姓名”,“年龄”:15}
在从XML结果中删除标记后,我得到了正确的名称的读取JSON值

问题是 有一种方法可以在c中读取纯JSON格式的字符串,就像在浏览器格式中读取一样 像这样

{“姓名”:“姓名”,“年龄”:15}

而不是像这样的格式

“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


有一个简单的解决方案。只需返回
,除了
字符串

     public stream checkSymbolExistJson(string pSymbol)
  {
        Person p    = new Person();
        p.name      = pSymbol;
        p.age       = 15;

    string json = JsonConvert.SerializeObject(p);
    return new MemoryStream(Encoding.UTF8.GetBytes(json));
  }

或者我建议使用web API代替WCF。

您的“浏览器中的结果”不应在外部包含引号或反斜杠。还要注意的是,调试器很有帮助地显示了字符串“转义”,因为您可以在源代码中编写它。您的代码可以工作!!!但是有一个小提示,如果我在谷歌浏览器中请求URL,chrome下载一个文件,如果我在IE或EDGE中执行URL,结果是文本,最后如果我用Win32应用程序读取代码,结果是可以的。唯一的问题是铬工艺。谢谢。我很高兴能帮上忙。chrome或其他web浏览器设计用于下载流。他们无法确定流是简单的字符串还是文件。所以他们只是下载它。