using System.Collections.Generic;
public static void Main()
""CasaAutomobilistica"": ""Fiat"",
""AnnoImmatricolazione"": ""2017"",
""Finanziamento"" : true,
""CasaAutomobilistica"": ""BMW"",
""Modello"": ""Serie 1"",
""AnnoImmatricolazione"": ""2019"",
""Finanziamento"" : false,
""CasaAutomobilistica"": ""Audi"",
""AnnoImmatricolazione"": ""2016"",
""Finanziamento"" : true,
var result = JsonConvert.DeserializeObject<Dictionary<string, Cars>>(input);
result["3"].CustomDump();
public partial class Cars
[JsonProperty("CasaAutomobilistica")]
public string CasaAutomobilistica { get; set; }
[JsonProperty("Modello")]
public string Modello { get; set; }
[JsonProperty("AnnoImmatricolazione")]
[JsonConverter(typeof(ParseStringConverter))]
public long AnnoImmatricolazione { get; set; }
public string Targa { get; set; }
public long Km { get; set; }
[JsonProperty("Finanziamento")]
public bool Finanziamento { get; set; }
public long Porte { get; set; }
public long Costo { get; set; }
internal class ParseStringConverter : JsonConverter
public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
if (reader.TokenType == JsonToken.Null) return null;
var value = serializer.Deserialize<string>(reader);
if (Int64.TryParse(value, out l))
throw new Exception("Cannot unmarshal type long");
public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
if (untypedValue == null)
serializer.Serialize(writer, null);
var value = (long)untypedValue;
serializer.Serialize(writer, value.ToString());
public static readonly ParseStringConverter Singleton = new ParseStringConverter();
public static class ObjectExtention {
public static void CustomDump<T>(this T data)
string json = JsonConvert.SerializeObject(data, Formatting.Indented);
Console.WriteLine("Dumping object "+ typeof(T).Name+" :");