Мне было интересно, как я мог в лучшем случае десериализовать эту строку json. Для этого я использую Newtonsoft.json как плагин с Xamarin.Каков наилучший способ desirialize этой строки json?
Мне нужны только части, которые говорят «транзакция» и массив в нем «транзакции» в списке.
{
"id": 999,
"transactions": [
{
"order": 1,
"displayName": "01_lgn",
"transaction": {
"id": 7791,
"name": "01_lgn",
"description": null,
"warning": 1,
"poor": 2,
"timeOut": 45,
"tolerated": 3,
"frustrated": 7,
"state": 1,
"includeInThroughputCalculation": true
}
}
{
"order": 2,
"displayName": "02",
"transaction": {
"id": 7793,
"name": "02",
"description": null,
"warning": 1,
"poor": 2,
"timeOut": 45,
"tolerated": 3,
"frustrated": 7,
"state": 1,
"includeInThroughputCalculation": true
}
}
],
"defies": null,
"state": 1,
"reportDisplayName": "testSomething"
}
Что я уже пробовал - это поместить его в строго типизированный класс, а затем составить его список.
public class testTransaction
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("state")]
public int State { get; set; }
[JsonProperty("reportDisplayName")]
public string ReportDisplayName { get; set; }
[JsonProperty("transactions")]
public List<testTransactions> testTransactions { get; set; }
}
public class testTransactions
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("description")]
public object Description { get; set; }
[JsonProperty("warning")]
public int Warning { get; set; }
[JsonProperty("poor")]
public int Poor { get; set; }
[JsonProperty("timeOut")]
public int TimeOut { get; set; }
[JsonProperty("tolerated")]
public int Tolerated { get; set; }
[JsonProperty("frustrated")]
public int Frustrated { get; set; }
[JsonProperty("state")]
public int State { get; set; }
[JsonProperty("includeInThroughputCalculation")]
public bool IncludeInThroughputCalculation { get; set; }
}
Но когда я пытаюсь десериализации его таким образом «SEARCHRESULT» пусто, и я вижу, что ничего не добавляется в список.
var bleh = jsonstring;
JObject parsedketenObject = JObject.Parse(bleh);
IList<JToken> jTokenResults1 = parsedketenObject;
IList<JToken> jTokenResults2 = parsedketenObject ["transactions"].Children().ToList();
IList<JToken> jTokenResults3 = parsedketenObject["transactions"][0]["transaction"].Children().ToList();
_Transactions_list = new List<testTransaction>();
foreach (JToken result in jTokenResults2)
{
testTransaction searchResult = JsonConvert.DeserializeObject<testTransaction>(result.ToString());
_Transactions_list.Add(searchResult);
}
Спасибо, что вы прокомментировали мое сообщение и что вы готовы мне помочь. Я только что связал ваш код, и я думаю, что я где-то получаю, но на данный момент я получил это сообщение об ошибке из Newtonsoft.json.jsonReadException. «Входная строка« 1.0 »не является допустимым целым. Транзакции« [»] .transaction .warning ', строка 1, позиция 496. " Может быть, что-то не так в Сильно типизированном классе? @Blueberry –
Нет проблем. Дважды проверьте, что строка JSON фактически равна 1, а не 1.0. Вы можете попробовать изменить тип предупреждения в классе TransactionDetails на двойную или четную строку в зависимости от вашего использования. – Blueberry
Еще раз спасибо. Он работает сейчас. Некоторые целые числа должны были быть строками. Но у меня есть последний вопрос. Может быть, вы можете мне помочь. Как я могу теперь показать значение x в UITableViewController? @Blueberry –