gpt4 book ai didi

c# - 使用 StringComparer 反序列化 JSON 字典

转载 作者:行者123 更新时间:2023-11-30 19:23:37 27 4
gpt4 key购买 nike

我正在尝试序列化/反序列化字典,问题是我用 StringComparer.OrdinalIgnoreCase 创建字典比较器。

这是我遇到的问题的代码片段:

var dict = new Dictionary<string, Dictionary<string, string>>(StringComparer.OrdinalIgnoreCase);

dict["x"] = new Dictionary<string, string>();
dict["x"]["y"] = "something";

var serialized = JsonConvert.SerializeObject(dict);

var unSerialized = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(serialized);

Console.WriteLine((dict.Comparer == unSerialized.Comparer ? "Same" : "Different"));

( .NET Fiddle - Try It )

在控制台打印出以下内容:

Different

显然,JSON 序列化程序不会序列化我在创建字典时设置的 Comparer,但问题是我无法在事后设置 Comparer,因为 Dictionary<TKey, TValue>.Comparer 是只读的。

我确定它与一些自定义有关 JsonSerializerSetting但我似乎无法弄清楚如何拦截集合创建并返回具有不同比较器的字典。

最佳答案

您还可以使用 PopulateObject 填充现有对象:

var dict = new Dictionary<string, Dictionary<string, string>>(StringComparer.OrdinalIgnoreCase);

dict["x"] = new Dictionary<string, string>();
dict["x"]["y"] = "something";

var json = JsonConvert.SerializeObject(dict);


var result = new Dictionary<string, Dictionary<string, string>>(StringComparer.OrdinalIgnoreCase);
JsonConvert.PopulateObject(json, result);

Console.WriteLine(result["x"]["y"]);
Console.WriteLine(result.Comparer == dict.Comparer ? "Same" : "Diff");

输出:

something
Same

关于c# - 使用 StringComparer 反序列化 JSON 字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46413406/

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