JSON.NET序列化麻烦

Ale*_*kor 11 .net asp.net-mvc serialization json

我有一个属性类型为Point的类(.NET Framework中的struct).我使用Newton.Json的JsonConvert将它序列化为JSON.但结果是

 "Point" : "100,100" 
Run Code Online (Sandbox Code Playgroud)

代替

 "Point" : { X: "100", Y: "100"}
Run Code Online (Sandbox Code Playgroud)

当我用标准JavascriptSerializer替换JsonConvert时,一切正常.

但是我想从JSON.Net使用JsonConverter,因为它要快得多.

svi*_*ick 9

那是因为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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

JsonConvert.SerializeObject(
    new { Point = new Point(15, 12) },
    new PointConverter())
Run Code Online (Sandbox Code Playgroud)