JSON.NET serialization trouble

荒凉一梦 提交于 2019-12-30 17:21:10

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!