Estou tentando usar uma API que usa a estrutura de exemplo a seguir para seu json retornado
[
{
"customer":{
"first_name":"Test",
"last_name":"Account",
"email":"[email protected]",
"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":"[email protected]",
"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 funcionaria muito bem com algo como a seguinte estrutura
{
"customer": {
["field1" : "value", etc...],
["field1" : "value", etc...],
}
}
Mas não consigo descobrir como fazê-lo ficar satisfeito com a estrutura fornecida.
Usar o JsonConvert.DeserializeObject (conteúdo) padrão resulta no número correto de Cliente, mas todos os dados são nulos.
Fazer algo em CustomerList (abaixo) resulta em uma exceção "Não é possível desserializar a matriz JSON atual"
public class CustomerList
{
public List<Customer> customer { get; set; }
}
Pensamentos?
Respostas:
Você pode criar um novo modelo para desserializar seu Json
CustomerJson
:E você pode desserializar seu json facilmente:
Espero que ajude !
Documentação: serializando e desserializando JSON
fonte
DeserializeObject()
é lento em telefones Android com ARM. Alguma solução melhor para esse caso?JObject.Parse(json);
Para quem não deseja criar nenhum modelo, use o seguinte código:
Observação: isso não funciona para sua string JSON. Esta não é uma solução geral para qualquer estrutura JSON.
fonte
var result = JsonConvert.DeserializeObject<Tuple<string, string, string>>(content);
IEnumerable
implementações (3 em comparação com List <Tuple>). Em segundo lugar, sua solução implica em duas chaves distintas - 1 para cada dicionário. O que acontecerá se vários clientes tiverem o mesmo nome? Não haveria diferenciação nas chaves. Sua solução não leva esse conflito em consideração.var result = JsonConvert.DeserializeObject<Tuple<string, string, string>>(content);
que funcionaria. Aparentemente, não funcionaUsando a resposta aceita você tem que acessar cada registro usando
Customers[i].customer
, e você precisa de umaCustomerJson
aula extra , o que é um pouco chato. Se não quiser fazer isso, você pode usar o seguinte:Observe que estou usando um
List<>
, não um Array. Agora crie a seguinte classe:fonte
Ligeira modificação do que foi dito acima. Meu formato Json, que valida foi
Usando a resposta de AlexDev, fiz este Looping cada criança, criando um leitor a partir dele
fonte
Modificações posteriores de JC_VA, pegue o que ele tem e substitua MyModelConverter por ...
Isso deve funcionar para json que seja
ou
ambos vão acabar sendo analisados como se fossem
fonte