c# - C#如何正确地将数组中的多个自定义对象反序列化为一个对象?
问题描述
我正在检索一个带有数组的 json 对象,该数组包含多种对象类型。
假设我检索到如下所示的 JSON 有效负载:
{
"Lines": [
{
"PropertyA": "A",
"PropertyB": "B"
},
{
"Property01": 1,
"Property02": 2
}]
}
我想将其反序列化为单个对象列表。
例子:
public List<Line> Lines;
所以我可以将对象与我期望的对象进行比较。
到目前为止我所拥有的:
public class Class1
{
public string PropertyA = "A";
public string PropertyB = "B";
}
public class Class2
{
public int Property01 = 01;
public int Property02 = 02;
}
public class MainClass
{
public List<dynamic> Lines;
}
class Program
{
static void Main(string[] args)
{
string json = "{\r\n \"Lines\": [\r\n {\r\n \"PropertyA\": \"A\",\r\n \"PropertyB\": \"B\"\r\n },\r\n {\r\n \"Property01\": 1,\r\n \"Property02\": 2\r\n }]\r\n}";
MainClass actual = JsonConvert.DeserializeObject<MainClass>(json);
MainClass expected = new MainClass()
{
Lines = new List<dynamic>()
{
new Class1(),
new Class2()
}
};
actual.Should().BeEquivalentTo(expected);
}
}
任何帮助将不胜感激!
干杯
解决方案
首先将字段更改为属性。那么这里最简单的方法是创建一个表示两个对象的通用对象,如下所示:
public class Class1
{
public string PropertyA {get;set;}
public string PropertyB {get;set;}
public int Property01 {get;set;}
public int Property02 {get;set;}
}
public class MainClass
{
public List<Class1> Lines;
}
和反序列化看起来像这样:
MainClass actual = JsonConvert.DeserializeObject<MainClass>(json);
如果您将 Class1 的类定义更改为具有可为空属性的对象,您将能够检测 json 中是否存在属性以区分两个对象:
public class Class1
{
public string PropertyA {get;set;}
public string PropertyB {get;set;}
public int? Property01 {get;set;}
public int? Property02 {get;set;}
}
另一种方法是使用 JArray 并使用此对象继续您的逻辑:
JArray arr = JArray.Parse(json);
推荐阅读
- deep-linking - 如何使用 AMP-HTML 与您的原生 android 应用进行深度链接,以便在 Google 的搜索页面上打开我的应用而不是我的 amp 网页?
- python - 如何使用 asm 代码为 Python 构建 C 库?
- elasticsearch - 如何使用嵌套布尔创建布尔过滤器查询应该使用 NEST OIS 查询
- jquery - 有没有办法将溢出隐藏添加到一侧?
- git - 在克隆之前查看 git repo (bitbucket) 的大小
- python - 错误提示 TypeError: boxplot() got multiple values for keyword argument 'vert',我该怎么办?
- docker - 如何在docker容器中访问spring cloud数据流服务器的http源?
- javascript - 如何将 css 属性设置为我作为字符串获取的 html 元素
- excel - 查找单元格中的特定文本,如果它包含 VLOOKUP
- java - 在将 java 对象解析为 xml 文件期间缺少正确的名称