【发布时间】:2017-03-07 00:40:09
【问题描述】:
我创建了一个简单的 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;
}
如果我在浏览器“http://localhost/MetaTraderWcf/rzManageQuotes.svc/checkSymbolExistJson/testename”中输入 URL,我会在浏览器中得到这个结果
"{\"name\":\"testename\",\"age\":15}"
在我制作了一个 win 32 应用程序以获取此 WCF 服务的 http 结果之后。 我使用此代码读取 HTML 页面
public string readUrl(string pUrl)
{
WebClient client = new WebClient { Encoding = System.Text.Encoding.UTF8 };
return client.DownloadString(pUrl);
}
我使用此代码读取 JSON 动态标签
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;
}
如果我在上面运行代码,下面是固定代码
string tmpToken = "{\"name\":\"testename\",\"age\":15}";
结果是正确的,我得到的结果是“testename”。
但是当我调试读取 Html 页面时,我会收到带有此字符串的 tmpToken 值
"\"{\\"name\\":\\"testename\\",\\"age\\":15}\""
当我读取名称的动态值时出现错误
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>
从 XML 结果中删除标签后,我得到正确的名称的读取 JSON 值。
问题是 有一些方法可以在 c# 中读取纯 JSON 格式的字符串,就像读取浏览器格式一样 像这样
{"name":"testename","age":15}
又不喜欢这种格式
"\"{\\"name\\":\\"testename\\",\\"age\\":15}\""
【问题讨论】:
-
您的“浏览器结果”不应在外部包含引号或反斜杠。另请注意,调试器有助于显示字符串“转义”,因为您可以在源代码中编写它。