Đó là vì Point
đã xác định TypeConverter
và JSON.NET của riêng nó sử dụng nó để thực hiện tuần tự hóa. Tôi không chắc liệu có một cách sạch sẽ để biến hành vi này ra, nhưng bạn chắc chắn có thể tạo riêng của bạn JsonConverter
mà ứng xử theo cách bạn muốn:
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);
}
}
Sau đó, bạn có thể sử dụng nó như thế này:
JsonConvert.SerializeObject(
new { Point = new Point(15, 12) },
new PointConverter())
để bạn có giải pháp của mình? –
có, nhưng tôi muốn sử dụng JsonConverter từ Json.Net, vì nó nhanh hơn nhiều. –
Bạn có nghĩa là 'System.Drawing.Point',' System.Windows.Point' hoặc một số loại khác không? – svick