C# - 将类型作为参数发送并根据它返回类型

时间:2016-08-21 12:26:05

标签: c# generics

我有一个接收动态对象和类型为字符串的函数。 我想将对象转换为我在字符串中的类型。

 public void PostAutomaticRule(dynamic automaticRuleObject, string ruleType)
        {
            switch (ruleType)
            {
                case "Increase_budget":
                    ConvertToAutomaticRule(typeof(IncreaseBudgetRule), ref automaticRuleObject);
                    break;
            }
        }


 private void ConvertToAutomaticRule<T>(Type type, ref dynamic ruleObject)
        {
            var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            var json = serializer.Serialize(ruleObject);
            var c = serializer.Deserialize<type>(json);
        }

我要转换为的课程:

 public class IncreaseBudgetRule
    {
        public string automaticRuleName { get; set; }
        public string givePrioity { get; set; }
    }

我有很多规则类型,所以我希望该函数接收一个类型和一个对象,并返回我在函数中发送的类型的对象。 我怎么能做到这一点?

2 个答案:

答案 0 :(得分:2)

您不需要ConvertToAutomaticRule-Method中的类型。您在那里定义了一个通用参数,您可以将其用作结果的类型。由于Deserialize-Method也接受一个通用的Argument,你可以像这样重写你的方法:

public void PostAutomaticRule(dynamic automaticRuleObject, string ruleType)
{
    switch (ruleType)
    {
        case "Increase_budget":
            ConvertToAutomaticRule<IncreaseBudgetRule>(ref automaticRuleObject);
            break;
    }
}


private void ConvertToAutomaticRule<T>(ref dynamic ruleObject)
{
    var serializer = new JavaScriptSerializer();
    var json = serializer.Serialize(ruleObject);
    var c = serializer.Deserialize<T>(json);
}

编辑(返回而不是使用参考):

您也可以使用generic参数设置为返回类型。

public void PostAutomaticRule(dynamic automaticRuleObject, string ruleType)
{
    switch (ruleType)
    {
        case "Increase_budget":
            var increasedBudgetRule = ConvertToAutomaticRule<IncreaseBudgetRule>(automaticRuleObject);
            break;
    }
}


private T ConvertToAutomaticRule<T>(dynamic ruleObject)
{
    var serializer = new JavaScriptSerializer();
    var json = serializer.Serialize(ruleObject);
    return serializer.Deserialize<T>(json);
}

答案 1 :(得分:0)

尝试将您的泛型更改为接口,这样您就可以执行以下操作:

Coypu definition, a large, South American, aquatic rodent, Myocastor (or Myopotamus) coypus, yielding the fur nutria. See more.