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'."
为什么会这样?
什么是错的,我该如何解决这个问题?
我做了一些检查,这是导致异常的代码:
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",因此尝试将字符串转换为它失败.
这就是反序列化此特定对象失败的原因.
| 归档时间: |
|
| 查看次数: |
2176 次 |
| 最近记录: |