C# 使用JsonConvert.DeserializeObject(Json.net)反序列化-按动态类型
我有以下问题。 我有一个枚举,它定义了所有(对象)从基类继承的可能对象的类型。 现在,我知道了要创建的对象的类型 但是,我想防止代码重复。 因此,为了做到这一点,我想做以下几点:C# 使用JsonConvert.DeserializeObject(Json.net)反序列化-按动态类型,c#,json,.net-4.0,json.net,deserialization,C#,Json,.net 4.0,Json.net,Deserialization,我有以下问题。 我有一个枚举,它定义了所有(对象)从基类继承的可能对象的类型。 现在,我知道了要创建的对象的类型 但是,我想防止代码重复。 因此,为了做到这一点,我想做以下几点: Type myType = null; string myParemeters = "json valid value" // the value to deserialize from switch (enumType) { case EnumType.X: myType = typeof(X
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);
}
Type myType=null;
字符串myParemeters=“json有效值”//要从中反序列化的值
开关(枚举类型)
{
案例枚举类型.X:
myType=typeof(X);
打破
案例枚举类型.Y:
myType=类型(Y);
打破
}
如果(myType!=null)
{
myRequest=JsonConvert.DeserializeObject(myParameters);
}
而myRequest是一个对象,可以是X、Y或枚举中列出的任何其他值(因为它们都是从基类继承的)
但是,由于出现以下错误,无法对其进行编译:
找不到类型或命名空间名称“myType”(是否为“”)
缺少使用指令或程序集引用?)
我现在的解决方案是在任何情况下都创建实例。。但我真的不想这么做
有人知道如何解决这个问题吗?试试这个
反序列化对象(“somejson”,myType)
若要了解为什么不能以这种方式将类型作为泛型参数传递,请参阅以下链接:
我使用此代码对其进行了测试:
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);
classtypea:BaseClass{}
类TypeB:基类{}
类基类
{
公共字符串名称{get;set;}
}
公共枚举测试
{
A=0,
B
}
///
///应用程序的主要入口点。
///
静态void Main()
{
const Test enumType=Test.A;
类型myType=null;
开关(枚举类型)
{
案例测试A:
myType=typeof(TypeA);
打破
案例测试B:
myType=typeof(类型B);
打破
}
var result=JsonConvert.DeserializeObject(“{'Name':'test'}”,myType);
- 抱歉,我看错了您的原始问题。我已经复制了您的代码并意识到了您的问题