【问题标题】:JSON.NET serialization troubleJSON.NET 序列化问题
【发布时间】:2012-04-02 19:07:51
【问题描述】:

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

 "Point" : "100,100" 

代替

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

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

但我想使用 JSON.Net 中的 JsonConverter,因为它要快得多。

【问题讨论】:

  • 是的,但我想使用 Json.Net 的 JsonConverter,因为它更快。
  • 您的意思是System.Drawing.PointSystem.Windows.Point,还是其他类型?

标签: .net asp.net-mvc json serialization


【解决方案1】:

那是因为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())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 2020-10-03
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多