using Newtonsoft.Json.Converters;
using System.Collections.Generic;
using System.Collections.Concurrent;
public static void Main()
string json = "{\"Test\":{\"164427220197179403\":\".\",\"342638529622310925\":\".\"},\"TestT\":{\"164427220197179403\":true,\"342638529622310925\":true}}";
Serializer.DeserializeJson<Foo>(json);
[JsonConverter(typeof(JsonDictionaryConverter<string,string>))]
public ConcurrentDictionary<string, string> Test { get; set; }
[JsonConverter(typeof(JsonDictionaryConverter<string,bool>))]
public ConcurrentDictionary<string, bool> TestT { get; set; }
public static class Serializer
public static T DeserializeJson<T>(string json){
return JsonConvert.DeserializeObject<T>(json);
public class JsonDictionaryConverter<k, v> : CustomCreationConverter<IDictionary<k, v>>
public override IDictionary<k, v> Create(Type objectType)
return (IDictionary<k,v>)Activator.CreateInstance(objectType);
public override bool CanConvert(Type objectType)
return objectType == typeof(object) || base.CanConvert(objectType);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
if (reader.TokenType == JsonToken.StartObject || reader.TokenType == JsonToken.Null)
return base.ReadJson(reader, objectType, existingValue, serializer);
return serializer.Deserialize(reader);