我有以下问题。 我有一个Enum,它定义了所有(对象)从基类继承的可能对象的类型。 现在,我知道我想要创建的对象的类型。
但是,我想防止代码重复。 所以为了做到这一点,我想做以下事情:
Type myType = null;
string myParemeters = "json valid value" // the value to deserialize from
switch (enumType)
{
case EnumType.X:
myType = typeof(X);
break;
case EnumType.Y:
myType = typeof(Y);
break;
}
if (myType != null)
{
myRequest = JsonConvert.DeserializeObject<myType>(myParameters);
}
虽然myRequest是一个对象,可以是X,Y或Enum中列出的任何其他值(因为它们都是从基类继承的)。
但是,由于我收到以下错误,因此无法编译:
无法找到类型或命名空间名称'myType'(是吗? 缺少using指令或程序集引用?)
我现在的解决方案是在每种情况下创建实例..但我真的不想这样做。
有人知道如何解决这个问题吗?
答案 0 :(得分:0)
试试这个
JsonConvert.DeserializeObject(“somejson”,myType);
要理解为什么不能以您的方式将类型作为通用参数传递,请参阅此链接:
c-sharp-use-system-type-as-generic-parameter
我用这段代码来测试它:
class TypeA : BaseClass {}
class TypeB : BaseClass {}
class BaseClass
{
public string Name { get; set; }
}
public enum Test
{
A = 0,
B
}
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
const Test enumType = Test.A;
Type myType = null;
switch (enumType)
{
case Test.A:
myType = typeof(TypeA);
break;
case Test.B:
myType = typeof(TypeB);
break;
}
var result = JsonConvert.DeserializeObject("{ 'Name': 'test' }", myType);