C# .Net Generic Base Class 方法从 json 字符串到 return 该类型的对象
C# .Net Generic Base Class Method to return Object of that type from a json string
所以,我真的不太熟悉泛型或反射,但我想知道这是否可能。
我想要做的是让 FromString return 从 json 反序列化中以正确类型创建的对象。
下面这一行
return JsonConvert.DeserializeObject(str);
我喜欢将通用的更改为用户
return JsonConvert.DeserializeObject< 我的对象类型 >(str);
public class BaseModel
{
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
public object FromString(string str)
{
return JsonConvert.DeserializeObject(str);
}
}
然后每当我想序列化或反序列化对象时,我都可以使用这些基本方法。
我知道我可以执行 GetType(this),它会给我程序集、对象名称以及命名空间。
但我不知道从那里去哪里。
非常感谢任何帮助:)
安吉拉
如果你想使用泛型,很简单:
public class BaseModel<T>
{
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
public T FromString<T>(string str)
{
return JsonConvert.DeserializeObject<T>(str);
}
}
您还可以使用一些反射魔法来获得非泛型 class:
public class BaseModel
{
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
public BaseModel FromString(string str)
{
var type = this.GetType();
var method = typeof(JsonConvert)
.GetMethods()
.FirstOrDefault(x =>
x.Name == "DeserializeObject"
&& x.IsGenericMethod
&& x.GetParameters().Count() == 1).MakeGenericMethod(type);
method.Invoke(null, new object[] { str });
return JsonConvert.DeserializeObject<T>(str);
}
}
然后在第二种情况下,您可以将结果转换为特定模型,例如
var mymodel = new SpecificModel();
var result = (SpecificModel)mymodel.FromString(str);
所以,我真的不太熟悉泛型或反射,但我想知道这是否可能。
我想要做的是让 FromString return 从 json 反序列化中以正确类型创建的对象。
下面这一行
return JsonConvert.DeserializeObject(str);
我喜欢将通用的更改为用户
return JsonConvert.DeserializeObject< 我的对象类型 >(str);
public class BaseModel
{
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
public object FromString(string str)
{
return JsonConvert.DeserializeObject(str);
}
}
然后每当我想序列化或反序列化对象时,我都可以使用这些基本方法。
我知道我可以执行 GetType(this),它会给我程序集、对象名称以及命名空间。
但我不知道从那里去哪里。
非常感谢任何帮助:)
安吉拉
如果你想使用泛型,很简单:
public class BaseModel<T>
{
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
public T FromString<T>(string str)
{
return JsonConvert.DeserializeObject<T>(str);
}
}
您还可以使用一些反射魔法来获得非泛型 class:
public class BaseModel
{
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
public BaseModel FromString(string str)
{
var type = this.GetType();
var method = typeof(JsonConvert)
.GetMethods()
.FirstOrDefault(x =>
x.Name == "DeserializeObject"
&& x.IsGenericMethod
&& x.GetParameters().Count() == 1).MakeGenericMethod(type);
method.Invoke(null, new object[] { str });
return JsonConvert.DeserializeObject<T>(str);
}
}
然后在第二种情况下,您可以将结果转换为特定模型,例如
var mymodel = new SpecificModel();
var result = (SpecificModel)mymodel.FromString(str);