gpt4 book ai didi

c# - 带有 StringComparer 序列化的 Json.NET Dictionary

转载 作者:IT王子 更新时间:2023-10-29 04:48:42 28 4
gpt4 key购买 nike

我有一本字典Dictionary<string, Dictionary<string, object>> .外部字典和内部字典都有一个相等比较器集(在我的例子中是 StringComparer.OrdinalIgnoreCase )。字典序列化和反序列化后,两个字典的比较器未设置为 StringComparer.OrdinalIgnoreCase .

如果您可以控制代码中字典的创建,则可以创建一个继承自字典的类,并在该类的默认构造函数中设置比较器。但是,如果您无法控制字典的创建,而是从其他代码获取字典怎么办?

有没有办法用比较器正确地序列化/反序列化它?

最佳答案

一个简单的想法是创建 Dictionary<string, string> 的子类将比较器设置为 StringComparer.OrdinalIgnoreCase默认情况下,然后反序列化为它而不是普通字典。例如:

class CaseInsensitiveDictionary<V> : Dictionary<string, V>
{
public CaseInsensitiveDictionary() : base(StringComparer.OrdinalIgnoreCase)
{
}
}

class Program
{
static void Main(string[] args)
{
string json = @"
{
""Foo"" :
{
""fiZZ"" : 1,
""BUzz"" : ""yo""
},
""BAR"" :
{
""dIt"" : 3.14,
""DaH"" : true
}
}";

var dict = JsonConvert.DeserializeObject<CaseInsensitiveDictionary<CaseInsensitiveDictionary<object>>>(json);

Console.WriteLine(dict["foo"]["fizz"]);
Console.WriteLine(dict["foo"]["buzz"]);
Console.WriteLine(dict["bar"]["dit"]);
Console.WriteLine(dict["bar"]["dah"]);
}
}

输出:

1
yo
3.14
True

关于c# - 带有 StringComparer 序列化的 Json.NET Dictionary<string,T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20976338/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com