Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用JsonConvert.DeserializeObject(Json.net)反序列化-按动态类型_C#_Json_.net 4.0_Json.net_Deserialization - Fatal编程技术网

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);
  • 抱歉,我看错了您的原始问题。我已经复制了您的代码并意识到了您的问题

谢谢你的回答。我会尝试你的解决方案。但是,我返回了此函数的请求。我想我有一个编译错误。我会尝试解决它,并让你知道它是否解决了我的问题。谢谢!没问题,希望有帮助!我已经编辑了你的标题。请参见“”,其中的共识是“不,他们不应该”。