反序列化包含引号和撇号的 JSON 字符串
Posted
技术标签:
【中文标题】反序列化包含引号和撇号的 JSON 字符串【英文标题】:Deserializing JSON strings which have quotes and apostrophes in them 【发布时间】: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。该死的,如果你这样做...... 【参考方案1】:http://json.org/ 因为不是序列化符号和双引号的正确方法...如果您无法控制,我建议您进行 html 解码,然后添加斜杠...或查找和替换...
【讨论】:
以上是关于反序列化包含引号和撇号的 JSON 字符串的主要内容,如果未能解决你的问题,请参考以下文章
序列化包含转义(反斜杠和双引号)的 JSON 字符串 Swift 返回格式错误的对象