Одна простая идея заключалась бы в создании подкласса 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