问题
I have a class with property type of Point ( struct in .NET Framework). I use JsonConvert from Newton.Json to serialize it to JSON. But result is
"Point" : "100,100"
Instead of
"Point" : { X: "100", Y: "100"}
When I replace JsonConvert with standard JavascriptSerializer, all works fine.
But I want to use JsonConverter from JSON.Net, because it's much faster.
回答1:
That's because Point
has defined its own TypeConverter
and JSON.NET uses it to do the serialization. I'm not sure whether there is a clean way to turn this behavior off, but you can certainly create your own JsonConverter
that behaves the way you want:
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((int)jObject["X"], (int)jObject["Y"]);
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Point);
}
}
You can then use it like this:
JsonConvert.SerializeObject(
new { Point = new Point(15, 12) },
new PointConverter())
来源:https://stackoverflow.com/questions/9750836/json-net-serialization-trouble