我正在使用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);
答案 0 :(得分:2)
您需要提供一种类型。反序列化器无法猜测反序列化时应从哪种类型中选择。将传入的泛型类型参数传递给DeserializeObject方法。
public T? GetKey<T>(string key) where T : struct
{
string content = CrossSettings.Current.GetValueOrDefault(key, null);
if (content == null)
return null;
return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(content);
}