#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}}}