【问题标题】:Extra Square Brackets being added when deserializing a JSON value with forward slash使用正斜杠反序列化 JSON 值时添加额外的方括号
【发布时间】:2023-02-23 12:28:29
【问题描述】:

我正在反序列化两个非常简单的 JSON 字典:

{"name": "Premium"}

{"na/me": "Premium"}

第一个字典中第一个条目的 JSON 路径是“名称”(正如预期的那样)。但是,第二个字典中第一个条目的 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。

【问题讨论】:

  • 我不确定 na/me 是否是有效路径,但我知道 ['na/me']一个有效的 json 路径,所以至少输出是正确的。我假设这样做是为了逃避正斜杠。
  • object2Deserialized 是一本字典。它的密钥是否正确如na/me

标签: c# json json.net


【解决方案1】:

为什么你使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2016-06-14
    • 1970-01-01
    相关资源
    最近更新 更多