Ich habe die folgende Klasse, dass ich als ein Schlüssel in einem Wörterbuch verwenden:Wie kann ich ein Wörterbuch mit benutzerdefinierten Schlüsseln mithilfe von Json.Net serialisieren/deserialisieren?
public class MyClass
{
private readonly string _property;
public MyClass(string property)
{
_property = property;
}
public string Property
{
get { return _property; }
}
public override bool Equals(object obj)
{
MyClass other = obj as MyClass;
if (other == null) return false;
return _property == other._property;
}
public override int GetHashCode()
{
return _property.GetHashCode();
}
}
Der Test bei mir läuft hier:
[Test]
public void SerializeDictionaryWithCustomKeys()
{
IDictionary<MyClass, object> expected = new Dictionary<MyClass, object>();
expected.Add(new MyClass("sth"), 5.2);
JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };
string output = JsonConvert.SerializeObject(expected, Formatting.Indented, jsonSerializerSettings);
var actual = JsonConvert.DeserializeObject<IDictionary<MyClass, object>>(output, jsonSerializerSettings);
CollectionAssert.AreEqual(expected, actual);
}
Der Test schlägt fehl, weil Json.Net zu scheint Verwenden Sie die ToString()
-Methode für die Wörterbuchschlüssel, anstatt sie ordnungsgemäß zu serialisieren. Der resultierende JSON aus dem obigen Test lautet:
was eindeutig falsch ist. Wie kann ich es zur Arbeit bringen?
JSON nicht immer Wörterbücher Griff sehr gut, warum Sie nicht einfach außer Kraft setzen '.ToString()' 'der MyClass'? –
Warum so ein komplexer Wörterbuchschlüssel? Warum nicht den Wörterbuchwert in Ihrer Klasse haben und das Wörterbuch durch eine Liste ersetzen? – gunr2171
Können Sie angeben, wie die erwartete Ausgabe aussehen soll? Weil ich ziemlich sicher bin, dass komplexe Attributnamen nicht Teil von JSON sind ... – Grx70