首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >json反序列化以选择类

json反序列化以选择类
EN

Stack Overflow用户
提问于 2018-05-09 05:28:03
回答 2查看 813关注 0票数 0

我有一个问题,那就是如何做好。

我有一个带有JSON的字符串,想把它改成class。

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

代码语言:javascript
复制
var json = JsonConvert.DeserializeObject<MyClass>(stringJson);

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

我知道一种方法,但我认为它是令人讨厌的。例如:

代码语言:javascript
复制
try
{
    var json = JsonConvert.DeserializeObject<MyClass1>(stringJson);
}
catch()
{}
try
{
    var json = JsonConvert.DeserializeObject<MyClass2>(stringJson);
}
catch()
{}

还有另一个原因要做吗?

编辑:

我有8-10个我可以得到的不同版本,在所有版本中,我知道它会是什么样子(版本的数量可以改变)。

EN

回答 2

Stack Overflow用户

发布于 2018-05-09 05:56:48

方法1

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

代码语言:javascript
复制
var json = JsonConvert.DeserializeObject<JObject>(stringJson);

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

代码语言:javascript
复制
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方法):

代码语言:javascript
复制
var json = JsonConvert.DeserializeObject<JObject>(stringJson);

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

并像Method 1中那样执行switch

方法3

此外,还可以从base class执行inherit操作

代码语言:javascript
复制
public class MyClass 
{

}

public class MyClass1 : MyClass
{

}

public class MyClass2 : MyClass
{

}

//And so on...

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

票数 0
EN

Stack Overflow用户

发布于 2018-05-09 05:58:35

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

例如,让我们以消息结构为例:

代码语言:javascript
复制
{
    "type": "info",
    "data" : { 

    }
}

然后你就有了它:

代码语言:javascript
复制
JObject parsed = JObject.Parse(stringJson);
var type = parsed["type"].Value<string>();

switch(type)
{
    case "info":
        {
            // got an info
            // You can parse the exact property you need, not the whole object
            var result = JsonConvert.DeserializeObject<Info>(parsed["data"].ToString());
            break;
        }
    case "error":
        {
            // got an error
            var result = JsonConvert.DeserializeObject<Error>(parsed["data"].ToString());
            break;
        }
}

如果您不能控制json格式,您可以使用任何证据来确定确切的类型

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50242512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档