gpt4 book ai didi

c# - 使用 JsonConvert.DeserializeObject (Json.net) 反序列化 - 按动态类型

转载 作者:太空宇宙 更新时间:2023-11-03 16:02:11 25 4
gpt4 key购买 nike

我有以下问题。我有一个枚举,它定义了所有(对象)从基类继承的可能对象的类型。现在,我知道我想要创建的对象的类型。

但是,我想防止代码重复。因此,为了做到这一点,我想执行以下操作:

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 或枚举中列出的任何其他值(因为它们都是从基类继承的)。

但是,由于出现以下错误,因此无法编译:

The type or namespace name 'myType' could not be found (are you missing a using directive or an assembly reference?)

我现在的解决方案是在每种情况下都创建实例..但我真的不想这样做。

有人知道如何解决这个问题吗?

最佳答案

试试这个

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

关于c# - 使用 JsonConvert.DeserializeObject (Json.net) 反序列化 - 按动态类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20837415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com