Это потому, что 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())