Как проверить, что список ключей присутствует в Json? - PullRequest
0 голосов
/ 30 марта 2020

В своем тестировании API я использую Jcontainer для преобразования ответа в Json. Пример:

[Test]
public void GetUsersList()
{
    var response = us.UserList();
    JContainer jsonresponse = rh.ConvertResponseToJson(response);
}

Я пытаюсь выполнить следующую проверку по Json Проверьте, присутствуют ли все ключи (Если присутствуют все ключи в json, например, id, отметка времени, введите et c ..) Вот мой json

[
  {
    "id": "aa0db615-d4cb-4466-bc23-0e0083002330",
    "timestamp": "2020-02-11T19:00:00-05:00",
    "type": 33554432,
    "info": "Full Synchronization request for all endpoints",
    "schedule": "once",
    "lastRun": null,
    "flags": 6,
    "creator": null,
    "isEditable": true,
    "location": 0,
    "duration": null
  },
  {
    "id": "70baa28c-e270-447b-b88a-20d30a9542db",
    "timestamp": "2020-02-11T19:00:00-05:00",
    "type": 33554432,
    "info": "Full Synchronization request for all endpoints",
    "schedule": "once",
    "lastRun": null,
    "flags": 6,
    "creator": null,
    "isEditable": true,
    "location": 0,
    "duration": null
  }
]

Вот мой преобразованный ответ на Json для справки

 public JContainer ConvertResponseToJson(HttpWebResponse response)
        {
            string localString;

            if (response.ContentEncoding.Contains("application/xml"))
            {
                // Convert the escaped Stream into an XML document.
                ConfigXmlDocument xmlDocument = new ConfigXmlDocument();
                xmlDocument.LoadXml(ConvertResponseStreamToString(response));

                // Now convert the properly-escaped JSON for the response into a JContainer
                localString = JsonConvert.SerializeXmlNode(xmlDocument);
            }
            else
                localString = ConvertResponseStreamToString(response);

            return JToken.Parse(localString) as JContainer;
        }

На данный момент я создал модель Json для читать его по индексу массива. Но я делаю несколько сборок, чтобы проверить все ключи. Я хочу просто пройти через них. Вот что у меня есть

var response = us.UserList();
    JContainer jsonresponse = rh.ConvertResponseToJson(response);
 var castedModel = Jsonresponse.ToObject<IList<Model>>();
            Assert.IsNotNull(castedModel[0].info);  //This is repeated I am trying to avoid this
          Assert.IsNotNull(castedModel[0].task);
           Assert.IsNotNull(castedModel[0].timestamp)

1 Ответ

1 голос
/ 30 марта 2020

Вы можете просто использовать для l oop.

 var castedModel = Jsonresponse.ToObject<IList<Model>>();

 for(int i = 0; i < castedModel.Count; i++)
 {
          Assert.IsNotNull(castedModel[i].info);
          Assert.IsNotNull(castedModel[i].task);
          Assert.IsNotNull(castedModel[i].timestamp)
 {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...