Um serialize ein Wörterbuch mit NodaTime.Instance JSon json.net mit feinen funktioniert, aber auf Deserialisierung wirft es Newtonsoft.Json. JsonSerializationException. Der Test zeigt das Problem:Wie ein Wörterbuch mit NodaTime.Instant deserialize mit Json.net ohne Ausnahme zu bekommen?
[Test]
public void DeserializeDictionaryThowsException() {
JsonConverter[] converters = { NodaConverters.IntervalConverter, NodaConverters.InstantConverter };
var dictionary = new Dictionary<Instant, int>() {
{Instant.FromUtc(2012, 1, 2, 3, 4, 5), 0}
};
var json = JsonConvert.SerializeObject(dictionary, Formatting.None, converters);
Assert.AreEqual("{\"2012-01-02T03:04:05Z\":0}", json); //ok
var result = JsonConvert.DeserializeObject<Dictionary<Instant, int>>(json, converters); // throws
}
DeserializeObject wirft:
Newtonsoft.Json.JsonSerializationException: Kann nicht konvertieren string '2012-01-02T03: 04: 05Z' Schlüsselart ‚Zum Wörterbuch NodaTime .Sofortig'. Erstellen Sie einen TypeConverter, um von der Zeichenfolge in das Schlüsseltypobjekt zu konvertieren. Zeile 1, Position 24. ----> Newtonsoft.Json.JsonSerializationException: Fehler beim Konvertieren des Werts "2012-01-02T03: 04: 05Z" in "NodaTime.Instant". Zeile 1, Position 24. ----> System.Exception: Konnte nicht von System.String in NodaTime.Instant konvertieren oder konvertieren.
Als eine Randnotiz funktioniert Deserialisierung eines Dictionary of DateTime gut. Ich denke, da String einen Konverter für DateTime hat.
[Test]
public void DeserializeDiciotnaryOfDateTime() // OK
{
var expected = new DateTime(2012, 1, 2, 3, 4, 5, DateTimeKind.Utc);
var dictionary = new Dictionary<DateTime, int>() { { expected, 0 } };
var json = JsonConvert.SerializeObject(dictionary);
var result = JsonConvert.DeserializeObject<Dictionary<DateTime, int>>(json);
Assert.AreEqual(expected, dictionary.Keys.First()); // OK
}
Leider dies noch nie zuvor gesehen zu haben. Ich weiß nicht genug über Json.NET, um Ihnen sofort eine Antwort zu geben, aber könnten Sie einen Bug auf http://noda-time.googlecode.com einreichen? –
Entschuldigung, wir haben das vorher verpasst und danke für die Beschreibung. Wir verfolgen dieses Problem [hier] (https://code.google.com/p/noda-time/issues/detail?id=237). –