反序列化包含引号和撇号的 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 字符串的主要内容,如果未能解决你的问题,请参考以下文章

bash中双引号单引号反撇号的用法

序列化包含转义(反斜杠和双引号)的 JSON 字符串 Swift 返回格式错误的对象

为啥我不能在 Python 中反序列化带有单引号的 JSON 字符串?

json反序列化的时候字符串为单引号的一个坑

JSON序列化

使用 Jackson 反序列化时禁用标量到字符串的转换