json反序列化以选择类

时间:2018-05-08 21:28:03

标签: c# json-deserialization

我有问题怎么做。

我有JSON字符串,希望将其更改为类。

我知道我可以使用这段代码:

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

问题是我有一些课程,并且不知道如何很好地选择应该使用哪个课程。

我知道一种方法,但我认为这是令人讨厌的。 E.g:

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

还有其他原因吗?

编辑:

我有8-10个不同版本的版本,在所有版本中我都知道它的外观(版本号可以更改)。

2 个答案:

答案 0 :(得分:0)

方法1

正如我评论的那样,在这种情况下你应该使用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;

}

方法2

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

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

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

方法1

中执行switch

方法3

此外,您可以base class

inherit
public class MyClass 
{

}

public class MyClass1 : MyClass
{

}

public class MyClass2 : MyClass
{

}

//And so on...

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

答案 1 :(得分:0)

您可以解析为index.php,根据您自己的规则选择确切的类型。你甚至可以使用LINQ和其他奇特的东西。

例如,让我们采取类似的消息结构:

if($_SERVER['REQUEST_URI'] == "/"){
    include('......server file directory to file you want to redirect to');
    exit;
}

然后你拥有它:

JObject

如果你无法控制json格式,你可以使用任何证据来确定确切的类型