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