我有一个接收动态对象和类型为字符串的函数。 我想将对象转换为我在字符串中的类型。
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; }
}
我有很多规则类型,所以我希望该函数接收一个类型和一个对象,并返回我在函数中发送的类型的对象。 我怎么能做到这一点?
答案 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.