[英]C# .Net Generic Base Class Method to return Object of that type from a json string
因此,我对泛型真的不那么了解或反思,但我想知道这是否可能。
我想做的是让FromString返回从json反序列化以正确类型创建的对象。
这条线下面
返回JsonConvert.DeserializeObject(str);
我想更改为通用用户
返回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);
}
}
您还可以使用一些反射魔术来拥有非泛型类:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.