[英]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.