C#WCF JSON返回字符串
我创建了一个简单的WCF服务,他工作得很好。 配置如下所示 接口具有此配置C#WCF JSON返回字符串,c#,json,wcf,C#,Json,Wcf,我创建了一个简单的WCF服务,他工作得很好。 配置如下所示 接口具有此配置 [OperationContract] [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "checkSymbol
[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浏览器设计用于下载流。他们无法确定流是简单的字符串还是文件。所以他们只是下载它。