NewtonSoft JsonConvert对动态对象类型进行反序列化
本文关键字:反序列化 类型 对象 JsonConvert 动态 NewtonSoft | 更新日期: 2023-09-27 17:59:18
我有一个抽象对象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)的长列表,而是根据传入的类型使用更动态的单返回语句?
我在想它会是这样的东西(不起作用)
JsonConvert.DeserializeObject<typeOf(dirtyItem)>(itemProperties);
我认为您正在寻找反序列化方法的(string, Type)
重载。
string itemProperties = dirtyItem.InitialItemSettingsJSON;
return (Item)JsonConvert.DeserializeObject(itemProperties, dirtyItem.GetType());
您也可以执行以下操作:
public static T GetFreshItem<T>(T dirtyItem) where T:Item
{
string itemProperties = dirtyItem.InitialItemSettingsJSON;
return JsonConvert.DeserializeObject<T>(itemProperties);
}
这样你就不需要打石膏了。