c# - 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 个不同的版本,我知道所有版本的外观(版本数量可以改变)。
解决方案
方法一
正如我评论的那样,您应该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...
如果这不是你需要的,请告诉我。
推荐阅读
- javascript - 在 chartjs 的顶部和底部边缘处减半的点
- kubernetes - 如何根据状态删除所有 pod
- types - 如何在 WebStorm 2020.2+ 中设置电子输入/完成?
- html - 使用 Outlook 覆盖 css 内联样式
- reactjs - 反应路由器dom(6.0.1)子路由无法正常工作
- css - 为什么 Handsontable CSS 文件不适用于我的 Angular 前端?
- angular - 赛普拉斯测试显示文件已上传,但 UI 显示并非如此
- python - 将 pack_padded_sequence 与 Transformer 一起使用会出错
- image-processing - 扁平化图像旋转矩阵
- sql - 如何使用 with CTE (WITH CTE- common_table_expression) 更新雪花中的语句?