Я использую библиотеку Newtonsoft.JSON для сериализации и десериализации объекта в общем методе. Проблема в том, что фундаментальные типы анализируются по-разному.
public T? GetKey<T>(string key) where T : struct
{
string content = CrossSettings.Current.GetValueOrDefault(key, null);
if (content == null)
return null;
object o = Newtonsoft.Json.JsonConvert.DeserializeObject(content);
T v = (T)o;
return v;
}
Когда сохраненное значение равно "1" (переменная content ), внутренний тип объекта длинный, и я не могу привести его непосредственно из объекта к T = int (InvalidCastException). Подход Propper будет приводить объект сначала к long, а затем к int, но поскольку это универсальный метод, я не знаю, какой будет тип результата.
Я также пытался использовать Activator.CreateInstance(o.GetType(), o);
, но это снова возвращает объект.
У вас есть идеи, как решить эту проблему?
РЕДАКТИРОВАТЬ: упрощенная задача
string content = "1";
object o = Newtonsoft.Json.JsonConvert.DeserializeObject(content);
int v = /* ??? */;
Debug.Assert(v == 1);