Проанализируйте json и найдите свойство c#

#c# #json

Вопрос:

Я должен регистрировать каждый запрос в нашем ASP.Net Проект веб-API. Когда я регистрирую каждый запрос, мне нужно искать свойство/токен (идентификатор лица) в полезной нагрузке и сохранять его в таблице журнала. Проблема в том, что полезная нагрузка (или модель представления) изменяется для каждого запроса, поэтому мне нужно искать свойство для другой полезной нагрузки. Я подумываю о том, чтобы использовать SelectToken и передавать путь к PersonID при каждом вызове. Есть ли лучший способ получить значение для разных моделей представления/полезной нагрузки?

Комментарии:

1. Если вы можете изменить модели, добавьте интерфейс, например, IMissingPerson который определяет GetPersonId() метод. Реализуйте интерфейс, сделайте так, чтобы метод возвращал значение PersonId этой модели, чтобы вы знали, что вызывать, независимо от того, в какую модель вы десериализовали свои JSONs. Итак, если класс не реализует интерфейс, вы можете бросить WhatTheHeckIsThisException , чтобы вы знали, что модель-мошенник не соответствует правилам, и вы можете это исправить.

2. Спасибо, но, к сожалению, это существующий проект, и внесение изменений в полезную нагрузку каждого запроса будет затруднено

Ответ №1:

Вы пытаетесь определить, PersonId существует ли он или получить его значение независимо от того, где он находится в JSON?

 JObject myObj = JsonConvert.DeserializeObject<dynamic>(myJsonReq);
var isPersonIdPresent = myObj[0].Children<JProperty>().Any(p => p.Name == "PersonId");
 

Интересно, может быть, было бы проще просто поискать в строке "PersonId" или "PersonId": .

Если вы хотите изменить значение элемента с PersonId помощью ключа as:

 var jsonObj = (JObject)JsonConvert.DeserializeObject(myJsonReqAsString);
string personIdValue = data["PersonId"].Value<string>();
 

Взгляните на этот пример с помощью Newtonsoft.JSON.

Комментарии:

1. Я взглянул на ссылку, и мне нужно найти PersonID и получить его значение, но будут ли данные[«PersonID»] работать со всеми json, поскольку структура json постоянно меняется с помощью разных моделей представления.

2. Так и должно быть, если это правильный формат JSON.

3. даже если полезная нагрузка представляет собой массив JSON или идентификатор лица находится на другом уровне, например «Человек»:{«Идентификатор»: {«Идентификатор лица»:123}}}