反序列化带有正斜杠的JSON值时添加的额外方括号

pnwntuvh  于 2023-02-26  发布在  其他
关注(0)|答案(2)|浏览(114)

我正在反序列化两个非常简单的JSON字典:
{"name": "Premium"}
{"na/me": "Premium"}
第一个字典中第一个条目的JSON路径是“name”(如预期的那样),然而,第二个字典中第一个条目的JSON路径是“['na/me']",但我会预期它是“na/me”,谁能解释一下这是怎么回事?
下面是一些代码,可以帮助您更好地理解:

string object1 = @"{""name"" : ""Premium""}";
var object1Deserialized = JsonConvert.DeserializeObject<Dictionary<string,string>>(object1);
var object1JToken = JToken.FromObject(object1Deserialized);
Assert.AreEqual("name", object1JToken.Children().First().Path);

string object2 = @"{""na/me"" : ""Premium""}";
var object2Deserialized = JsonConvert.DeserializeObject<Dictionary<string, string>>(object2);
var object2JToken = JToken.FromObject(object2Deserialized);
Assert.AreEqual("['na/me']", object2JToken.Children().First().Path);
//The above test case passes

由于某种原因,object2JToken.Children().First().Path"['na/me']"而不是"na/me"。此行为是故意的吗?还是错误?使用.NET 7.0和Newtonsoft.Json 13.0.2。

vsnjm48y

vsnjm48y1#

为什么您使用Newtonsoft.Json,而.NET 7有一个很棒的built-in standard serializer!!

using System.Text.Json;

string object2 = @"{""na/me"" : ""Premium""}";
var d = JsonSerializer.Deserialize<Dictionary<string, string>>(object2);

Console.WriteLine(d.Keys.First());

您所期望输出

na/me
lrl1mhuk

lrl1mhuk2#

你的代码甚至不能编译,你有两行做同样的事情。试试这个

string object2 = @"{""na/me"" : ""Premium""}";
var object2JToken = JToken.Parse(object2);
 
Assert.AreEqual("['na/me']", object2JToken.First().Path);

//but maybe it is better

Assert.AreEqual("na/me",JObject.Parse(object2).Properties().First().Name;

相关问题