c# - C# - Json 反序列化具有子属性的对象
问题描述
我有以下json:
{
"issue" :
{
"id": 1,
"project":
{
"id":1,
"name":"name of project"
}
}
}
我正在尝试将此 json 反序列化为以下类:
public class Issue
{
public int? id { get; set; }
public int project_id { get; set; }
public string project_name { get; set; }
}
有办法获取子属性并设置为父亲吗?
解决方案
最简单的解决方案之一是转换为JObject
并使用它从中创建所需的对象。
var jObject = JsonConvert.DeserializeObject<JObject>(text);
var issue = new Issue() {id = (int?)jObject["issue"]["id"], project_id = (int)jObject["issue"]["project"]["id"], project_name = (string)jObject["issue"]["project"]["name"]};
下面的代码做了提到的:
using System;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public class Issue
{
public int? id { get; set; }
public int project_id { get; set; }
public string project_name { get; set; }
public override string ToString()
{
return "Id: " + id + " project Id: " + project_id + " project name : " + project_name;
}
}
public class Program
{
public static void Main()
{
var text = "{ \"issue\" : { \"id\": 1, \"project\": { \"id\": 2, \"name\":\"name of project\" }}}";
var jObject = JsonConvert.DeserializeObject<JObject>(text);
var issue = new Issue() {id = (int?)jObject["issue"]["id"], project_id = (int)jObject["issue"]["project"]["id"], project_name = (string)jObject["issue"]["project"]["name"]};
Console.WriteLine(issue);
}
}
您可以在此处查看现场演示。
推荐阅读
- python - Django启动时如何输入字符串?
- c# - 保留查询字符串
- excel - 将具有彩色背景的单元格与其他单元格分开求和
- java - 考虑在配置中定义一个名为“entityManagerFactory”的bean。升级到spring boot 2后的mssqlserver
- spring - 转发请求 Spring RestController
- android - How to center text in RecyclerView
- matlab - Matlab: perfcurve scores must be a vector of floating values
- angular - Angular cli未安装在Windows 10上
- gosu - Gosu for 循环遍历单列的行以进行日期检查
- angular - ngx-translate-core 无法翻译 ng-container 元素