gpt4 book ai didi

c# - 使用 Json.NET 序列化 XNA 矩形

转载 作者:太空狗 更新时间:2023-10-29 23:02:34 24 4
gpt4 key购买 nike

我正在使用 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);

一切都按预期进行。控制台输出为:"3, 6, 32, 32"

但是当我想对 the XNA Rectangle 做同样的事情时,我得到一个错误。 (只是用这个“using Microsoft.Xna.Framework;”替换了旧的 using)

控制台输出为:“{X:-3 Y:6 Width:32 Height:32}”

它抛出的错误是:“将值“{X:-3 Y:6 Width:32 Height:32}”转换为键入 'Microsoft.Xna.Framework.Rectangle' 时出错。”

  1. 为什么会这样?

  2. 出了什么问题,我该如何解决?

最佳答案

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

    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);
}

对执行转换工作的委托(delegate)的实际调用找不到此类型的转换器。调查此问题的原因,因为序列化程序能够正确地序列化和反序列化其他类型。

编辑:

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

    [Serializable]
[TypeConverter(typeof(RectangleConverter))]
public struct Rectangle : IEquatable<Rectangle>

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

  TypeConverter fromConverter = GetConverter(targetType);

if (fromConverter != null && fromConverter.CanConvertFrom(initialType))
{
// deserialize
}

RectangleConverter 有一个标记“supportsStringConvert = false”,因此尝试将字符串转换成它会失败。

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

关于c# - 使用 Json.NET 序列化 XNA 矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6854461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com