繁体   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