使用Json.NET序列化XNA矩形

Rik*_*iki 5 c# xna serialization json.net

我正在使用Json.NET 首先看看这个:

using System.Drawing;
string json = JsonConvert.SerializeObject(new Rectangle(-3,6,32,32), Formatting.Indented);
Console.WriteLine(json);
Rectangle deserializedRectangle = JsonConvert.DeserializeObject<Rectangle>(json);
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作.控制台输出为:"3,6,32,32"

但是当我想用XNA Rectangle做同样的事情时,我得到一个错误.(刚刚使用Microsoft.Xna.Framework替换旧的使用;")

控制台输出为:"{X:-3 Y:6宽度:32高度:32}"

它抛出的错误是:"转换值"{X:-3 Y:6宽度:32高度:32}时出错"输入'Microsoft.Xna.Framework.Rectangle'."

  1. 为什么会这样?

  2. 什么是错的,我该如何解决这个问题?

lys*_*cid 5

我做了一些检查,这是导致异常的代码:

    public static bool TryConvert(object initialValue, CultureInfo culture, Type targetType, out object convertedValue)
    {
      return MiscellaneousUtils.TryAction<object>(delegate { return Convert(initialValue, culture, targetType); }, out convertedValue);
    }
Run Code Online (Sandbox Code Playgroud)

对转换工作的委托的实际调用无法找到此类型的转换器.调查原因,因为序列化程序能够正确地序列化和反序列化其他类型.

编辑:

这不起作用,因为XNA Rectangle类型定义为:

    [Serializable]
    [TypeConverter(typeof(RectangleConverter))]
    public struct Rectangle : IEquatable<Rectangle>
Run Code Online (Sandbox Code Playgroud)

Json.NET检索TypeConverter类型,并在其上调用此方法:

  TypeConverter fromConverter = GetConverter(targetType);

  if (fromConverter != null && fromConverter.CanConvertFrom(initialType)) 
  {
       // deserialize
  }
Run Code Online (Sandbox Code Playgroud)

RectangleConverter有一个标志"supportsStringConvert = false",因此尝试将字符串转换为它失败.

这就是反序列化此特定对象失败的原因.