diff --git a/src/LitJson/JsonMapper.cs b/src/LitJson/JsonMapper.cs index 5a0a436..5cd9268 100644 --- a/src/LitJson/JsonMapper.cs +++ b/src/LitJson/JsonMapper.cs @@ -779,10 +779,13 @@ private static void WriteValue (object obj, JsonWriter writer, return; } - if (obj is IDictionary) { + if (obj is IDictionary dictionary) { writer.WriteObjectStart (); - foreach (DictionaryEntry entry in (IDictionary) obj) { - writer.WritePropertyName ((string) entry.Key); + foreach (DictionaryEntry entry in dictionary) { + var propertyName = entry.Key is string key ? + key + : Convert.ToString(entry.Key, CultureInfo.InvariantCulture); + writer.WritePropertyName (propertyName); WriteValue (entry.Value, writer, writer_is_private, depth + 1); } diff --git a/test/JsonMapperTest.cs b/test/JsonMapperTest.cs index 17829a9..a980cfa 100644 --- a/test/JsonMapperTest.cs +++ b/test/JsonMapperTest.cs @@ -306,6 +306,22 @@ public void ExportEnumsTest () Assert.AreEqual ("{\"FavouritePlanet\":1,\"Band\":9}", json); } + [Test] + public void ExportEnumDictionaryTest() + { + Dictionary planets = new Dictionary(); + + planets.Add(Planets.Jupiter, 5); + planets.Add(Planets.Saturn, 6); + planets.Add(Planets.Uranus, 7); + planets.Add(Planets.Neptune, 8); + planets.Add(Planets.Pluto, 9); + + string json = JsonMapper.ToJson(planets); + + Assert.AreEqual("{\"Jupiter\":5,\"Saturn\":6,\"Uranus\":7,\"Neptune\":8,\"Pluto\":9}", json); + } + [Test] public void ExportObjectTest () {