Логика вашего кода состоит в том, чтобы показать JSON, если vehicRec == null
.
JSON, показанный на изображении, является массивом.Обратите внимание на квадратные скобки []
, обертывающие объект JSON.
[{....}]
Это будет означать, что запрос десериализации объекта не будет выполнен.Выполните рефакторинг кода для десериализации в массив, а затем извлеките нужный объект из результата.
//...omitted for brevity
var json = await result.Content.ReadAsStringAsync();
try {
vehicRec = Newtonsoft.Json.JsonConvert.DeserializeObject<VehicleRecord>(json);
if(vehicRec == null) {
//check for an array just in case
var items = JsonConvert.DeserializeObject<VehicleRecord[]>(json);
if(items != null && items.Length > 0) {
vehicRec = items[0];
}
}
}
catch (Exception ex) { }
if (vehicRec == null)
{
Toast.MakeText(this, json, ToastLength.Short).Show();
}
else
{
firstName.Text = vehicRec.firstName;
lastName.Text = vehicRec.lastName;
gen.Text = vehicRec.gender;
ic.Text = vehicRec.icNo;
address.Text = vehicRec.address;
phoneNo.Text = vehicRec.phoneNo;
username.Text = vehicRec.username;
password.Text = vehicRec.password;
payment.Text = vehicRec.paymentMethod;
}
//...omitted for brevity
Также обратите внимание, что в JSON есть несколько элементов в массиве.Я бы посоветовал вам рассмотреть возможность использования списка для отображения записей в массиве.
Приведенный выше код покажет только первый элемент в массиве, но его можно легко изменить, чтобы использовать массив в качестве источника данных для представления списка.
Было также отмечено, что именаполя в JSON не совпадают с полями заполняемого класса.Это приведет к тому, что свойства не получат никаких значений.
Из одного из ваших предыдущих вопросов я смог увидеть, что вы определили класс как
public class VehicleRecord {
public string firstName { get; set; }
public string lastName { get; set; }
public string gender { get; set; }
public string icNo { get; set; }
public string address { get; set; }
public string phoneNo { get; set; }
public string email { get; set; }
public string username { get; set; }
public string password { get; set; }
public string plateNo { get; set; }
public string model { get; set; }
public string col { get; set; }
public string paymentMethod { get; set; }
}
Но JSON показан на рисункевсе поля имеют префикс cl
.
. Вам нужно добавить отображение, чтобы JsonConverter знал, как заполнять класс
public class VehicleRecord {
[JsonProperty("clFirstName")]
public string firstName { get; set; }
[JsonProperty("clLastName")]
public string lastName { get; set; }
[JsonProperty("clGender")]
public string gender { get; set; }
//...etc
}
. Возможно, вам лучше использовать JSON-анализаторсоздать класс для вас, который также будет включать атрибуты для сопоставления свойств.