Questo perché Point
ha definito il proprio TypeConverter
e JSON.NET lo utilizza per eseguire la serializzazione. Io non sono sicuro se c'è un modo pulito per disattivare questo comportamento, ma si può certamente creare il proprio JsonConverter
che si comporta nel modo desiderato:
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);
}
}
è possibile utilizzare in questo modo:
JsonConvert.SerializeObject(
new { Point = new Point(15, 12) },
new PointConverter())
quindi hai la soluzione? –
sì, ma voglio usare JsonConverter di Json.Net, perché è molto più veloce. –
Vuoi dire 'System.Drawing.Point',' System.Windows.Point', o qualche altro tipo? – svick