【问题标题】:JsonConvert.DeserializeObject not decoding special characterJsonConvert.DeserializeObject 不解码特殊字符
【发布时间】:2019-08-28 15:18:00
【问题描述】:

我目前正在序列化一个像下面这样的对象。

“record”是一个字符串数组,里面有特殊字符,如>、

记录中的第一个索引是“

之后,当我尝试使用 HttpUtility.JavaScriptStringEncode 对其进行转义时,它会转换为 \u0026lt 。

var result = new Dictionary<string, string>();
string[] record = { "<", ">", "John & James" };
            for (int x = 0; x < record.Length; x++)
            {
                string xmlEscaped = SecurityElement.Escape(record[x]); 
                result.Add($"F{235}_{"Property"}{x + 1}", HttpUtility.JavaScriptStringEncode(xmlEscaped));
            }
string json= JsonConvert.SerializeObject(result);

json 的结果是

{"F235_Property1":"\u0026lt;","F235_Property2":"\u0026gt;","F235_Property3":"John \u0026amp; James"}

当我反序列化相同的 json 时,我使用

var jsonConverted = JsonConvert.DeserializeObject(json);

但是反序列化后,转换后的特殊字符并没有转换回原来的。 示例 - \u0026lt 没有转换回 "&lt";

请帮助我解决这个问题。 提前致谢。

【问题讨论】:

  • 您上面的代码不完整,无法编译。您能否提供一个minimal reproducible example,我们可以运行它来重现问题?
  • 我已经对代码进行了必要的编辑。请看一下。
  • @user1844283 发布实际的 json 字符串。不是近似值。在几乎 all 类似的情况下,虽然没有特殊字符。 &amp;lt 是 3 个普通的美国 ASCII 字符。 &amp; 对于 JSON 也没有特殊意义。如果你真的在你的字符串中看到\u0026,它的 6 个普通的美国 ASCII 字符,而不是一些转义序列
  • 所有这些引用和转义创建问题。您不需要任何类型的转义即可使用 JSON.NET。也许您应该在添加所有引用之前发布您最初尝试做的事情?
  • JsonConvert.SerializeObject(new[]{ "&lt;", "&gt;", "John &amp; James" }) 返回字符串 ["&lt;","&gt;","John &amp; James"]。它不需要任何额外的处理。 JSON 不关心 XML 的 特殊字符,因此它不需要任何类型的转义。您是否尝试混合使用 XML 和 JSON?

标签: asp.net .net json c#-4.0 json.net


【解决方案1】:

将您的 json 反序列化为字典,并反转您在序列化之后对键值对中的每个值执行的每个操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    相关资源
    最近更新 更多