【问题标题】:How to get element value from response data to json如何从响应数据中获取元素值到 json
【发布时间】:2021-09-25 05:10:00
【问题描述】:

我正在使用 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}

【问题讨论】:

  • 您是否尝试从查询字段中读取值?那就是您的数据所在的位置。 var fsQuery = jsonParse.Value("查询");像 docs.microsoft.com/en-us/dotnet/standard/serialization/… 这样封装响应以将 json 反序列化为对象是一种很好的做法
  • 是的,但现在我得到 System.InvalidOperationException:无法访问 Newtonsoft.Json.Linq.JProperty 上的子值。 :(@michal.materowski
  • 您是否尝试使用 Children() 方法访问查询对象的子项? var jsonData = JObject.Parse(json).Children(); List 令牌 = jsonData .Children().ToList();也许首先尝试调试你的测试,看看你得到什么样的对象,你可以在结果上调用什么方法。这总是一个好的开始。
  • 谢谢!我会试试的。完全忘记了调试。 @michal.materowski
  • 设法用 var fsQuery = jsonParse.Value("Query");正如迈克尔所说。调试响应,发现错误,纠正它,它就像一个魅力。再次感谢你! @michal.materowski

标签: c# json .net-core restsharp web-api-testing


【解决方案1】:

您必须访问“查询”对象

  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

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    相关资源
    最近更新 更多