簡體   English   中英

C#.Net通用基類方法從json字符串返回該類型的Object

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM