JSON.NET序列化问题

11
我有一个类,其中包含一个属性为Point(在.NET Framework中是结构体)的类型。 我使用Newton.Json的JsonConvert将其序列化为JSON。 但结果是

 "Point" : "100,100" 

不要使用

 "Point" : { X: "100", Y: "100"}

我将 JsonConvert 替换为标准的 JavascriptSerializer,一切正常。

但是我想使用 JSON.Net 中的 JsonConverter,因为它更快。


是的,但我想使用Json.Net中的JsonConverter,因为它更快。 - Alex Shkor
你是指 System.Drawing.PointSystem.Windows.Point 还是其他类型? - svick
1个回答

10

这是因为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((int)jObject["X"], (int)jObject["Y"]);
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(Point);
    }
}

然后您可以像这样使用它:

JsonConvert.SerializeObject(
    new { Point = new Point(15, 12) },
    new PointConverter())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接