using Newtonsoft.Json.Linq;
public static void Main()
var deSerialized = JsonConvert.DeserializeObject<MyModel>("{\"myName\":\"My Name\",\"myPolygon\":{\"type\":\"Polygon\",\"coordinates\":[[[-100.0,45.0],[-98.0,45.0],[-99.0,46.0],[-100.0,45.0]]]}}");
Console.WriteLine("myName: " + deSerialized.myName);
Console.WriteLine("myPolygon type: " + deSerialized.myPolygon?.type);
Console.WriteLine("myPolygon coordinates:");
foreach (var point in deSerialized.myPolygon.coordinates[0])
Console.WriteLine($" ({point[0]}, {point[1]})");
public string myName { get; set; }
[JsonConverter(typeof(MyPolygonConverter))]
public Polygon myPolygon { get; set; }
public string type { get; set; }
public double[][][] coordinates { get; set; }
public class MyPolygonConverter : JsonConverter<Polygon>
public override Polygon ReadJson(JsonReader reader, Type objectType, Polygon existingValue, bool hasExistingValue, JsonSerializer serializer)
JObject jo = JObject.Load(reader);
Polygon poly = new Polygon();
poly.type = (string)jo["type"];
poly.coordinates = jo["coordinates"].ToObject<double[][][]>(serializer);
public override bool CanWrite => false;
public override void WriteJson(JsonWriter writer, Polygon polygon, JsonSerializer serializer)
throw new NotImplementedException();