首页 > 解决方案 > 如何从响应数据中获取元素值到 json

问题描述

我正在使用 RestSharp 编写 API 自动化测试。任何帮助都将不胜感激!我正在从响应中获取数据值,并且我需要将几个值写入我的 json 文件(我将用于另一个测试,将它们作为一个主体)。我设法从 JArray 中获得了 1 个值,但我还需要 2 个值,但我不知道该怎么做。我附上了我的 api 测试代码和从响应中获得的数据 + 我设法写入我的 json 文件的数据。

我设法获得的值:FsNumber(将其声明为 FinancialNumber)。我需要添加到 json 中:subjectName + subjectCode(它们将被声明为 companyName/companyCode)。如何使用 SubjectName/SubjectCode 访问“查询”列表?

测试

var queryResult = client.Execute<object>(request);

var data = JsonConvert.SerializeObject(queryResult.Data);

var jsonParse = JToken.Parse(data);

var fsObject = jsonParse.Value<JToken>("FinanceReportList");
var fsArray = fsObject.Value<JArray>("List");

foreach (var fs in fsArray)
{
    var cfn = fs.Value<string>("FsNumber");

    var queryObject = new DataQuery
    {
        financialNumber = cfn,
    };

    var queryObjectString = JsonConvert.SerializeObject(queryObject);
    File.WriteAllText(@"C:\Users\TestAPI\myJsonWithValues.json", queryObjectString);
}

我从回复中得到的数据:

{
  "RequestDate": "2021-07-16",
  "Message": "Active",
  "ProductNumber": 666,
  "Language": "EN",
  "RequestId": "reqID666",
  "Query": {
    "SubjectCode": "MY-SUBJECT",
    "SubjectName": "MY-NAME"
  },
  "FinanceReportList": {
    "List": [
      {
        "FsNumber": "MY-NUMBER",
        "Year": 2021,

到目前为止,我设法将 FsNumber 获取到我的 myJsonWithValues.json 文件中,如下所示: {"financialNumber":"MY-NUMBER","companyName":null,"companyCode":null} 我想要做的是,我的 json 应该看起来像 {"financialNumber":"MY-NUMBER","companyName":MY-NAME,"companyCode":MY-CODE}

标签: c#json.net-corerestsharpweb-api-testing

解决方案


您必须访问“查询”对象

  var fsQuery = jsonParse.Value<JToken>("Query") 

并使用 Children() 方法访问“查询”的属性

var children = fsQuery.Children(); 

实现一个封装你的响应并使用 JsonConvert.Deserialize 反序列化它的类是一个好习惯,例如。

public class Account
{
    public string Email { get; set; }
    public bool Active { get; set; }
    public DateTime CreatedDate { get; set; }
    public IList<string> Roles { get; set; }
}

Account account = JsonConvert.DeserializeObject<Account>(json);

而不是使用 JObjects


推荐阅读