行分隔符“ \ u2028”使用json.net解析不正确

时间:2018-09-05 03:44:24

标签: c# 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 \“}”

将行分隔符char'\ u2028'解析为'\\ u2028'。我不能确定是否有其他字符有相同的问题。有人能帮忙吗?谢谢。

Pic in immediate window

jsonStr in text visualizer

jsonStrAfterParse in text visualizer

1 个答案:

答案 0 :(得分:1)

您在评论中确定这是预期的行为,但是我认为我会根据source code来探讨为什么

由于未转义的控制字符\u2028,您的输入字符串不是有效的JSON,但是NewtonSoft.Json很好地处理了错误的输入,并在您要求对其进行序列化时提供正确的输出\\u2028。你。

对于反序列化,它不在乎您没有逃脱它。它只是继续并将其包含在您的字符串中。没关系。

但是,当您要求它使用.ToString(Newtonsoft.Json.Formatting.None)(这是一种Newtonsoft扩展方法)为您序列化字符串时,它的工作是为您提供有效的JSON,而根据天真的,这就是要做的事情,给您您看到的\\u2028