我有一个抽象对象Item,它有几个子节点:RadioItem,CheckItem等。
每个项目都将自己的属性存储在序列化的JSON字符串属性中。
我试图创建一个可以接收Item的静态类,从JSON字符串中实例化一个新项并返回它。
现在我的代码看起来像这样:
public static Item GetFreshItem(Item dirtyItem)
{
string itemProperties = dirtyItem.InitialItemSettingsJSON;
if (dirtyItem is RadioItem)
{
return JsonConvert.DeserializeObject<RadioItem>(itemProperties);
}
if (dirtyItem is CheckItem)
{
return JsonConvert.DeserializeObject<CheckItem>(itemProperties);
}
return null;
}
有没有办法没有一长列If(x是Type)并使用更动态的单一return语句,具体取决于传入的类型?
我当时认为它是这样的(它不起作用)
JsonConvert.DeserializeObject<typeOf(dirtyItem)>(itemProperties);
答案 0 :(得分:3)
我认为你正在寻找反序列化方法的(string, Type)
overload。
string itemProperties = dirtyItem.InitialItemSettingsJSON;
return (Item)JsonConvert.DeserializeObject(itemProperties, dirtyItem.GetType());
答案 1 :(得分:0)
你也可以这样做:
public static T GetFreshItem<T>(T dirtyItem) where T:Item
{
string itemProperties = dirtyItem.InitialItemSettingsJSON;
return JsonConvert.DeserializeObject<T>(itemProperties);
}
这样你就不需要演员了。