Я сделал некоторую проверку, вот код, который вызывает исключение:
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);
}
Фактический вызов делегата, который выполняет преобразование, не может найти преобразователь для этого типа.Расследование причины этого, поскольку сериализатор может правильно сериализовать и десериализовать другие типы.
РЕДАКТИРОВАТЬ:
Это не работает, так как тип XNA Rectangle определен как:
[Serializable]
[TypeConverter(typeof(RectangleConverter))]
public struct Rectangle : IEquatable<Rectangle>
Json.NET извлекает тип TypeConverter и вызывает для него этот метод:
TypeConverter fromConverter = GetConverter(targetType);
if (fromConverter != null && fromConverter.CanConvertFrom(initialType))
{
// deserialize
}
У RectangleConverter есть флаг, говорящий "SupportStringConvert = false", поэтому попытка преобразовать строку в него не удалась.
Это причина того, что десериализация этого конкретного объекта не удалась.