【发布时间】:2012-03-23 01:29:20
【问题描述】:
所以,我有一个 JSON 对象,其中一个字符串成员中包含引号(“)和撇号(')等字符。
此 JSON 对象由第三方 API(我无法控制)返回。这就是我调用此 API 的方式:
var client = new WebClient();
var data = new NameValueCollection();
var result = client.UploadValues(url, data);
MemoryStream ms = new MemoryStream(result);
所以,当我尝试像这样反序列化这个字符串时:
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(MyClass));
MyClass obj= serializer.ReadObject(ms) as MyClass;
ms.Close();
我收到一条错误消息,显示“{”遇到意外字符 '&'。”}”。
当我使用以下代码将字节数组读入字符串时,我看到 & 和撇号字符被编码为“'”和“& quot;”。
MemoryStream ms2 = new MemoryStream(result);
ms2.Seek(0, SeekOrigin.Begin);
StreamReader sr = new StreamReader(ms2);
string s = sr.ReadToEnd();
所以看起来反序列化器不喜欢 JSON 字符串中的 & 字符。我做错了什么?
【问题讨论】:
-
您是否尝试过对响应进行 html 解码?如果它是从获取请求中返回的,您可以获得这种行为。
-
是的,它只是将编码的引号字符解码为实际的引号,这也破坏了 JSON。该死的,如果你这样做......
标签: c# .net json serialization deserialization