繁体   English   中英

无法将 Json 字符串反序列化为 .NET 对象,但反序列化后该对象为空

[英]Unable to Deserialize Json string into a .NET object, but the object is null after deserializing

我正在尝试获取测试套件的 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM