首页 > 解决方案 > json反序列化以选择类

问题描述

我有问题如何做得很好。

我有 JSON 字符串,想把它改成类。

我知道我可以使用以下代码:

var json = JsonConvert.DeserializeObject<MyClass>(stringJson);

问题是我有几个类,不知道如何很好地选择应该使用的类。

我知道一种方法,但我认为它很讨厌。例如:

try
{
    var json = JsonConvert.DeserializeObject<MyClass1>(stringJson);
}
catch()
{}
try
{
    var json = JsonConvert.DeserializeObject<MyClass2>(stringJson);
}
catch()
{}

还有其他为什么要这样做吗?

编辑:

我有 8-10 个不同的版本,我知道所有版本的外观(版本数量可以改变)。

标签: c#json-deserialization

解决方案


方法一

正如我评论的那样,您应该object在这种情况下使用:

var json = JsonConvert.DeserializeObject<JObject>(stringJson);

在您的 JObject 中,您应该发送您的类和switch它,如下所示:

string type = json["type"].ToString();

switch(type) 
{

    case "MyClass":
         //do whatever...
         break;

    case "MyClass1":
         //do whatever...
         break;

    case "MyClass2":
         //do whatever...
         break;

}

方法二

我写了一个错误,是的,我错过了这个(你可以使用 ToObject 方法):

var json = JsonConvert.DeserializeObject<JObject>(stringJson);

string type = json.ToObject<object>().GetType().Name;

并在方法1中做一个switch喜欢

方法三

此外,您可以从 a继承base class

public class MyClass 
{

}

public class MyClass1 : MyClass
{

}

public class MyClass2 : MyClass
{

}

//And so on...

如果这不是你需要的,请告诉我。


推荐阅读