C# 返回与输入相同对象类型的泛型方法

C# 返回与输入相同对象类型的泛型方法,c#,generics,C#,Generics,我想创建一个方法,它接受任何类型的对象,并返回该对象的实例化版本,如: public static T GetObjectFromJToken<T>(JToken jToken, string jTokenTag) where T : new () { if (jToken[tag] != null && jToken[tag].ToString() != "") { return new T(JToken.Parse(jToken[t

我想创建一个方法,它接受任何类型的对象,并返回该对象的实例化版本,如:

public static T GetObjectFromJToken<T>(JToken jToken, string jTokenTag) where T : new ()
{
    if (jToken[tag] != null && jToken[tag].ToString() != "")
    {
        return new T(JToken.Parse(jToken[tag].ToString()));
    }
    return new T();
}
MyObject myObject = GetObjectFromJToken<MyObject>(jToken, "someJsonTag");
然后可以使用这种方法,比如:

public static T GetObjectFromJToken<T>(JToken jToken, string jTokenTag) where T : new ()
{
    if (jToken[tag] != null && jToken[tag].ToString() != "")
    {
        return new T(JToken.Parse(jToken[tag].ToString()));
    }
    return new T();
}
MyObject myObject = GetObjectFromJToken<MyObject>(jToken, "someJsonTag");
这可能吗?

您可以使用JToken.ToObject通用方法,如下所示:

public static T GetObjectFromJToken<T>(JToken jToken, string jTokenTag) where T : class, new()
{
    return jToken[jTokenTag]?.ToObject<T>() ?? new T();
}

请注意,新约束仅保证该类型具有无参数构造函数。您需要使用反射来填充属性值,但最好使用Json库中的现有方法来填充属性值?你需要传递一个字符串,然后将其解析为特定的值吗?基本上,我试图从JToken获取任何类型的对象,这可以是任何用户创建的对象,因此我想告诉方法应该使用什么类型的对象来解析JToken,然后返回构造的对象。如果找不到键,则返回null;那不是他想要的。