c# - 无法将 Json 字符串反序列化为 .NET 对象,但反序列化后对象为空
问题描述
我正在尝试获取测试套件的 json 响应并将它们放在我可以查询的列表中。我相信我已正确设置对象以进行反序列化,但是当我查看调试器中的值时,它为空。我不知道问题是什么,真的需要一些帮助。我能够通过使用 Newtonsoft.Json.Linq JObjects 获得所需的数据,但我的高级工程师说这不是最佳实践,他的方法对我不起作用。它适用于他构建的另一个工具,我几乎完全复制了他所做的。
示例 Json:
{
"id": 81,
"revision": 6,
"project": {
"id": "499b955d-7143-4382-932e-9cd17df45f83",
"name": "Project1",
"url": "https://dev.azure.com/fabrikam/_apis/projects/MyProject",
"state": "unchanged",
"visibility": "unchanged"
},
"lastUpdatedBy": {
"displayName": "Fabrikam Fiber",
"url": "https://vssps.dev.azure.com/fabrikam/Aea08ebc7-105f-4bb2-a36b-f92e0e9de65a/_apis/Identities/0fdbdad8-6afb-6149-9af9-c0a216137d1d",
"_links": {
"avatar": {
"href": "https://dev.azure.com/fabrikam/_apis/GraphProfile/MemberAvatars/aad.MGZkYmRhZDgtNmFmYi03MTQ5LTlhZjktYzBhMjE2MTM3ZDFk"
}
},
"id": "9b6bee0e-28b2-42b6-ab5b-5122b63d473c",
"uniqueName": "fabrikamfiber1@microsoft.com",
"imageUrl": "https://dev.azure.com/fabrikam/_api/_common/identityImage?id=0fdbdad8-6afb-6149-9af9-c0a216137d1d",
"descriptor": "win.Uy0xLTUtMjEtMjE0Njc3MzA4NS05MDMzNjMyODUtNzE5MzQ0NzA3LTIwMjE0OTM"
},
"lastUpdatedDate": "2018-08-31T10:12:20.33Z",
"plan": {
"id": 79,
"name": "Sample Test Plan"
},
"_links": {
"_self": {
"href": "https://dev.azure.com/fabrikam/MyProject/_apis/testplan/Plans/79/Suites/81"
},
"testCases": {
"href": "https://dev.azure.com/fabrikam/MyProject/_apis/test/Plans/79/Suites/81/TestCases"
},
"testPoints": {
"href": "https://dev.azure.com/fabrikam/MyProject/_apis/test/Plans/79/Suites/81/Points"
}
},
"suiteType": "staticTestSuite",
"name": "Sample Static Suite 1",
"parentSuite": {
"id": 80,
"name": "Sample Test Plan"
},
"inheritDefaultConfigurations": true
}
这是我的代码:
[Route("api/MyCodeController")]
[ApiController]
public class MyCodeController : ControllerBase
{
public void Get(string Var1, string Var2, string Var3, string Var4, string Var5)
{
HttpClient HttpClient = new HttpClient();
string TestPlanUri = "uri";
using (var RequestMessage = new HttpRequestMessage(HttpMethod.Get, TestPlanUri))
{
using (var TestSuites = HttpClient.SendAsync(RequestMessage).Result)
{
var ResObject = TestSuites.Content.ReadAsAsync<ExpandoObject>().Result;
var TargetSuite = JsonConvert.DeserializeObject<RootObject>(JsonConvert.SerializeObject(ResObject)).ChildSuites.ToList();
Console.WriteLine(TargetSuite[0].parentSuite.name);
}
}
}
public class CloneTargetSuite
{
public string id { get; set; }
public string name { get; set; }
public ParentSuite parentSuite { get; set; }
}
public class ParentSuite
{
public int id { get; set; }
public string name { get; set; }
}
public class RootObject
{
public List<CloneTargetSuite> ChildSuites { get; set; }
}
}
解决方案
我认为您的类结构与您的 JSON 不匹配。我可以使用此类结构反序列化您的 JSON。
public class Rootobject
{
public int id { get; set; }
public string name { get; set; }
public Parentsuite parentSuite { get; set; }
}
public class Parentsuite
{
public int id { get; set; }
public string name { get; set; }
}
var obj = JsonConvert.DeserializeObject<Rootobject>(json);
推荐阅读
- python - 如何在 discord.py 的“commands.Bucket”中获取限速人员
- indentation - 有没有办法在 Pharo 的操场内自动缩进代码?
- azure - 如何获取 Azure Windows VM 计划信息?
- azure - Azure 通知中心标记表达式不适用于多个标记
- android - 无法用 Genymotion(三星 Galaxy S10)的模拟器编译新的 flutter_2.0.4
- python - 如果键列表中的所有元素都存在,则检索键 n 字典
- list - 如何让动态列(如第 w1、w2、w3 周等)包含数字值作为 Sharepoint 列表中的分数
- java - 匹配包含任何子字符串的列表
- android - OkHttp(s)URLConnection 类在 4.9.0 版本中不可用
- javascript - 给定一个数组索引,如何在包装时获取索引前后的 n 个邻居?