我正在尝试解析一些仅由(字符串,字符串)对组成的JSON对象。我正在解析的文件包含此内容。我想模仿 resjson 行为。
{
"first_key": "first_value",
"unicode": "u0040 @"
}
我所做的是
string path = @"d:resjsonexample.resjson";
string jsonText = File.ReadAllText(path);
IDictionary<string, string> dict;
try
{
dict = JsonConvert.DeserializeObject<IDictionary<string, string>>(jsonText);
}
catch(Exception ex)
{
// log or something
}
当我获得字典对象时,
foreach (var pair in _dict)
{
string key = pair.Key;
string value = pair.Value;
Console.WriteLine("Key = '{0}', Value = '{1}'", key, value);
}
这对我来说是输入:
"Key = 'first_key', Value = 'first_value'"
"Key = 'unicode', Value = '@ @'"
一旦Newtonsoft.Json反序列化对象,我就会丢失"\u0040"字符串,并且我无法知道原始文件的外观。有没有办法保留字符转义?
好吧,一个简单的想法是在将其传递给解析器之前转义原始文本中的所有反斜杠:
dict = JsonConvert.DeserializeObject<IDictionary<string, string>>(
jsonText.Replace(@"", @"\"));
使用 Newtonsoft.Json,您实际上可以执行以下操作:
var settings = new JsonSerializerSettings()
{
StringEscapeHandling = StringEscapeHandling.EscapeNonAscii
};
var json = JsonConvert.SerializeObject([obj or JToken], settings);
它不会显示反序列化时丢失的原始字符串,但它会将所有非 ascii 字符编码为 \uXXXX