Eso es porque Point
ha definido su propio TypeConverter
y JSON.NET lo usa para hacer la serialización. No estoy seguro de si hay una manera limpia para convertir este comportamiento fuera, pero que sin duda puede crear su propio JsonConverter
que se comporta de la manera deseada:
class PointConverter : JsonConverter
{
public override void WriteJson(
JsonWriter writer, object value, JsonSerializer serializer)
{
var point = (Point)value;
serializer.Serialize(
writer, new JObject { { "X", point.X }, { "Y", point.Y } });
}
public override object ReadJson(
JsonReader reader, Type objectType, object existingValue,
JsonSerializer serializer)
{
var jObject = serializer.Deserialize<JObject>(reader);
return new Point((double)jObject["X"], (double)jObject["Y"]);
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Point);
}
}
A continuación, puede utilizar de esta manera:
JsonConvert.SerializeObject(
new { Point = new Point(15, 12) },
new PointConverter())
para que tenga su solución? –
sí, pero quiero usar JsonConverter de Json.Net, porque es mucho más rápido. –
¿Quiere decir 'System.Drawing.Point',' System.Windows.Point', o algún otro tipo? – svick