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 \“}”
将行分隔符char'\ u2028'解析为'\\ u2028'。我不能确定是否有其他字符有相同的问题。有人能帮忙吗?谢谢。
答案 0 :(得分:1)
您在评论中确定这是预期的行为,但是我认为我会根据source code来探讨为什么。
由于未转义的控制字符\u2028
,您的输入字符串不是有效的JSON,但是NewtonSoft.Json很好地处理了错误的输入,并在您要求对其进行序列化时提供正确的输出\\u2028
。你。
对于反序列化,它不在乎您没有逃脱它。它只是继续并将其包含在您的字符串中。没关系。
但是,当您要求它使用.ToString(Newtonsoft.Json.Formatting.None)
(这是一种Newtonsoft扩展方法)为您序列化字符串时,它的工作是为您提供有效的JSON,而根据天真的,这就是要做的事情,给您您看到的\\u2028
。