Кажется невозможным (де) сериализовать универсальный словарь с использованием Json.NET из коробки.
class KeyClass
{
public KeyClass(string p1, string p2) { prop1 = p1; prop2 = p2;}
public string prop1 { get; set; }
public string prop2 { get; set; }
}
class ValueClass
{
public ValueClass(string pa, string pb) { propA = pa; propB = pb;}
public string propA { get; set; }
public string propB { get; set; }
}
...
Dictionary<KeyClass, ValueClass> d = new Dictionary<KeyClass, ValueClass>();
d.Add(new KeyClass("k1", "k2"), new ValueClass("v1", "v2"));
d.Add(new KeyClass("k3", "k4"), new ValueClass("v3", "v4"));
string json = JsonConvert.SerializeObject(d);
возвращает
{"ConsoleApplication1.KeyClass":{"propA":"v1","propB":"v2"},
"ConsoleApplication1.KeyClass":{"propA":"v3","propB":"v4"}}
, где я ожидал что-то вроде:
{{"prop1":"k1","prop2":"k2"}:{"propA":"v1","propB":"v2"},
{"prop1":"k3","prop2":"k4"}:{"propA":"v3","propB":"v4"}}
Итак, ToString()
вызывается для ключа (KeyClass). (переопределение, которое генерирует JSON, не помогает: избегает JSON и просто не чувствует себя хорошо).
Можно ли написать CustomCreationConverter для этого случая?
Это ограничение hard для json.NET?
Если так, другие библиотеки поддерживают это?