Estou tentando desserializar a chamada da API Graph de um amigo do Facebook em uma lista de objetos. O objeto JSON se parece com:
{"data":[{"id":"518523721","name":"ftyft"},
{"id":"527032438","name":"ftyftyf"},
{"id":"527572047","name":"ftgft"},
{"id":"531141884","name":"ftftft"},
{"id":"532652067","name"...
List<EFacebook> facebooks = new JavaScriptSerializer().Deserialize<List<EFacebook>>(result);
Não está funcionando, porque o objeto primitivo é inválido. Como posso desserializar isso?
Dictionary<string,string>
, confira: stackoverflow.com/questions/7699972/…Respostas:
Você precisa criar uma estrutura como esta:
Então você deve ser capaz de:
Os nomes das minhas aulas são apenas um exemplo. Você deve usar nomes próprios.
Adicionando um teste de amostra:
Produz:
fonte
Às vezes eu prefiro objetos dinâmicos:
fonte
Uma ótima maneira de gerar automaticamente essas classes para você é copiar sua saída JSON e lançá-la aqui:
http://json2csharp.com/
Ele fornecerá um ponto de partida para retocar suas classes para desserialização.
fonte
Com muita facilidade, podemos analisar o conteúdo JSON com a ajuda do dicionário e do JavaScriptSerializer. Aqui está o código de exemplo pelo qual analiso o conteúdo JSON de um arquivo ashx.
fonte
Newtonsoft.JSON
é uma boa solução para esse tipo de situação. TambémNewtonsof.JSON
é mais rápido do que outros, tais comoJavaScriptSerializer
,DataContractJsonSerializer
.Nesta amostra, você pode o seguinte:
Em seguida, você pode converter jsonData em
JArray
e pode usar umfor
loop para obter dados a cada iteração.Além disso, quero adicionar algo:
Trabalhar com objetos dinâmicos e usar o Newtonsoft serialize é uma boa opção.
fonte
Concordo com Icarus (teria comentado se pudesse), mas, em vez de usar uma classe CustomObject , usaria um dicionário (caso o Facebook adicione algo).
ou
fonte
public IList<IDictionary<string, dynmaic>> data { get; set; }
Serialização:
Desserialização ::
Para desserializar um objeto dinâmico
fonte
Você pode usar essas extensões
fonte
Aqui está outro site que o ajudará com todo o código necessário, desde que você tenha disponível uma string JSON formatada corretamente:
https://app.quicktype.io/
fonte
Se você estiver usando o .NET Core 3.0, poderá usar System.Text.Json (agora incorporado) para desserializar o JSON.
A primeira etapa é criar classes para modelar o JSON. Existem muitas ferramentas que podem ajudar nisso, e algumas das respostas aqui as listam.
Algumas opções são http://json2csharp.com , http://app.quicktype.io ou use o Visual Studio (menu Editar → Colar especial → Colar JSON como classes ).
Em seguida, você pode desserializar usando:
Se você precisar adicionar configurações, como
camelCase
manipulação, passe as configurações do serializador para o desserializador da seguinte maneira:fonte