|
@@ -54,6 +54,7 @@ namespace Topten.JsonKit
|
|
|
|
|
|
public static Func<Type, Action<IJsonWriter, object>> _formatterResolver;
|
|
|
public static ThreadSafeCache<Type, Action<IJsonWriter, object>> _formatters = new ThreadSafeCache<Type, Action<IJsonWriter, object>>();
|
|
|
+ public static ThreadSafeCache<Type, Func<object, string>> _keyFormatters = new ThreadSafeCache<Type, Func<object, string>>();
|
|
|
|
|
|
static Action<IJsonWriter, object> ResolveFormatter(Type type)
|
|
|
{
|
|
@@ -130,6 +131,22 @@ namespace Topten.JsonKit
|
|
|
NextElement();
|
|
|
}
|
|
|
|
|
|
+ // Writes a dictionary key using custom formatter if available
|
|
|
+ void WriteDictionaryKey(object value)
|
|
|
+ {
|
|
|
+ string str;
|
|
|
+ Func<object, string> formatter;
|
|
|
+ if (_keyFormatters.TryGetValue(value.GetType(), out formatter))
|
|
|
+ {
|
|
|
+ str = formatter(value);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ str = value.ToString();
|
|
|
+ }
|
|
|
+ WriteKey(str);
|
|
|
+ }
|
|
|
+
|
|
|
// Write next dictionary key
|
|
|
public void WriteKey(string key)
|
|
|
{
|
|
@@ -298,7 +315,7 @@ namespace Topten.JsonKit
|
|
|
{
|
|
|
foreach (var key in d.Keys)
|
|
|
{
|
|
|
- WriteKey(key.ToString());
|
|
|
+ WriteDictionaryKey(key);
|
|
|
WriteValue(d[key]);
|
|
|
}
|
|
|
});
|
|
@@ -313,7 +330,7 @@ namespace Topten.JsonKit
|
|
|
{
|
|
|
foreach (var key in dso.Keys)
|
|
|
{
|
|
|
- WriteKey(key.ToString());
|
|
|
+ WriteDictionaryKey(key);
|
|
|
WriteValue(dso[key]);
|
|
|
}
|
|
|
});
|