c# - 行分隔符 '\u2028' 使用 json.net 解析不正确
问题描述
static void Main(string[] args)
{
var newLineChar = Char.Parse("\u2028");
var jsonStr = @"{""value"":""some chars " + newLineChar + @"""}";
var jObject = Newtonsoft.Json.Linq.JObject.Parse(jsonStr);
var jsonStrAfterParse = jObject.ToString(Newtonsoft.Json.Formatting.None);
}
我有一个 JSON 字符串,如:
"{\"value\":\"一些字符 \u2028\"}"
在我尝试使用 Newtonsoft.Json 解析它之后,我得到了 JSON:
"{\"value\":\"一些字符 \\u2028\"}"
行分隔符字符“\u2028”被解析为“\\u2028”。我无法确定是否有任何其他字符有同样的问题。有人能帮忙吗?谢谢。
解决方案
在评论中,您确定这是预期的行为,但我想我会根据源代码解释原因。
由于未转义的控制字符,您的输入字符串不是有效的 JSON \u2028
,但是 NewtonSoft.Json 正在优雅地处理错误的输入,并\\u2028
在您要求它为您序列化时给出正确的输出。
对于反序列化,你没有逃避它并不关心。它只是继续并将其包含在您的字符串中。没什么大不了的。
但是当你要求它为你序列化字符串时.ToString(Newtonsoft.Json.Formatting.None)
——这是一种 Newtonsoft 扩展方法——它的工作是为你提供有效的 JSON,天哪,这就是它要做的,给你\\u2028
你看到的。
推荐阅读
- r - 使用 rbinding 数据帧为 R 制作更快的 for 循环
- c# - 如何通过 C# 使用 trie 来避免内存不足
- python - 将 TimeDistributed 与 VGG19 Keras 模型一起使用时出错
- xaml - 如何复用UI元素的组合?
- php - 如何在没有 Google 分析的情况下获取用于在 PHP 中查找我的网站的 Google 搜索关键字?
- python - 具有多级列的熊猫设置索引
- python - 如何使用组合循环并在子流程中使用?
- javascript - 如何处理 Gmail-API 的承诺和退货?
- java - 如何更改时间戳中的日期格式
- node.js - 将变量绑定到节点请求生命周期