這是因爲Point
已經定義了它自己的TypeConverter
和JSON.NET使用它來進行序列化。我不知道是否有關閉該行爲乾淨的方式,但你肯定可以創建自己的JsonConverter
,其行爲您想要的方式:
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);
}
}
然後,您可以使用它像這樣:
JsonConvert.SerializeObject(
new { Point = new Point(15, 12) },
new PointConverter())
所以你有你的解決方案? – 2012-03-17 14:54:00
是的,但我想從Json.Net使用JsonConverter,因爲它更快。 – 2012-03-17 14:57:42
你的意思是'System.Drawing.Point','System.Windows.Point'還是其他類型? – svick 2012-03-17 15:29:47