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);