Я пытаюсь использовать API, который использует следующую структуру примера для возвращенного json
[
{
"customer":{
"first_name":"Test",
"last_name":"Account",
"email":"test1@example.com",
"organization":"",
"reference":null,
"id":3545134,
"created_at":"2013-08-06T15:51:15-04:00",
"updated_at":"2013-08-06T15:51:15-04:00",
"address":"",
"address_2":"",
"city":"",
"state":"",
"zip":"",
"country":"",
"phone":""
}
},
{
"customer":{
"first_name":"Test",
"last_name":"Account2",
"email":"test2@example.com",
"organization":"",
"reference":null,
"id":3570462,
"created_at":"2013-08-12T11:54:58-04:00",
"updated_at":"2013-08-12T11:54:58-04:00",
"address":"",
"address_2":"",
"city":"",
"state":"",
"zip":"",
"country":"",
"phone":""
}
}
]
JSON.net отлично работал бы со следующей структурой
{
"customer": {
["field1" : "value", etc...],
["field1" : "value", etc...],
}
}
Но я не могу понять, как сделать так, чтобы он был доволен предоставленной структурой.
Использование JsonConvert.DeserializeObject (content) по умолчанию приводит к правильному количеству клиентов, но все данные равны нулю.
Выполнение чего-либо из списка клиентов (ниже) приводит к исключению «Невозможно десериализовать текущий массив JSON».
public class CustomerList
{
public List<Customer> customer { get; set; }
}
Мысли?
Ответы:
Вы можете создать новую модель для десериализации вашего Json
CustomerJson
:И вы можете легко десериализовать свой json:
Надеюсь, поможет !
Документация: сериализация и десериализация JSON
источник
DeserializeObject()
работает медленно на телефонах Android под управлением ARM. Есть ли лучшее решение для этого случая?JObject.Parse(json);
Для тех, кто не хочет создавать какие-либо модели, используйте следующий код:
Примечание: это не работает для вашей строки JSON. Это не общее решение для любой структуры JSON.
источник
var result = JsonConvert.DeserializeObject<Tuple<string, string, string>>(content);
IEnumerable
реализаций (3 по сравнению с List <Tuple>). Во-вторых, ваше решение подразумевает два разных ключа - по 1 для каждого словаря. Что произойдет, если у нескольких клиентов одно и то же имя? По клавишам не было бы никакой разницы. Ваше решение не учитывает этот конфликт.var result = JsonConvert.DeserializeObject<Tuple<string, string, string>>(content);
это сработает. Очевидно, это не сработаетИспользуя принятый ответ, вы должны получить доступ к каждой записи с помощью
Customers[i].customer
, и вам нужен дополнительныйCustomerJson
класс, что немного раздражает. Если вы не хотите этого делать, вы можете использовать следующее:Обратите внимание, что я использую, а
List<>
не массив. Теперь создайте следующий класс:источник
Небольшая модификация того, что было сказано выше. Мой формат Json, который проверяет, был
Используя ответ AlexDev, я сделал этот цикл для каждого ребенка, создав из него читателя.
источник
Дальнейшая модификация от JC_VA, возьмите то, что у него есть, и замените MyModelConverter на ...
Это должно работать для json, который либо
или
они оба будут проанализированы, как если бы они были
источник