Tentando converter uma sequência JSON em um objeto em C #. Usando um caso de teste realmente simples:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
O problema é que o routes_list nunca é definido; é um objeto indefinido. Alguma ideia?
JavaScriptSerializer
sobre a versão do MS, pois não irá aceitar qualquer outra coisa, mas do WCF personalizado formatação JSON (por exemplo, campos de data que se parecem com datas, mas não são cercados em DATE () falhar miseravelmente)Respostas:
Parece que você está tentando desserializar para um objeto bruto. Você pode criar uma classe que representa o objeto para o qual está convertendo. Isso seria mais útil nos casos em que você está lidando com objetos maiores ou Strings JSON.
Por exemplo:
Então seu código de desserialização seria:
Mais informações podem ser encontradas neste tutorial: http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-Csharp.aspx
fonte
Ou, você pode usar a biblioteca Newtownsoft.Json da seguinte maneira:
Onde
T
está o seu tipo de objeto que corresponde à sua sequência JSON.fonte
Você provavelmente não deseja apenas declarar routes_list como um
object
tipo. Ele não possui uma propriedade .test, então você realmente não receberá um bom objeto de volta. Este é um daqueles lugares em que seria melhor definir uma classe ou uma estrutura ou usar a palavra-chave dinâmica.Se você realmente deseja que esse código funcione como você o possui, você precisará saber que o objeto retornado por DeserializeObject é um dicionário genérico de string, objeto. Aqui está o código para fazer dessa maneira:
Se você deseja usar a palavra-chave dinâmica, pode ler como aqui .
Se você declarar uma classe ou estrutura, poderá chamar Deserialize em vez de DeserializeObject da seguinte maneira:
fonte
object routes_list
. Usevar
ou repita-se explicitamente e declare routes_list como um IDictionary <string, objeto>.Usando objeto dinâmico com JavaScriptSerializer.
fonte
Newtonsoft é mais rápido que o serializador de scripts java. ... esse depende do pacote Newtonsoft NuGet, que é popular e melhor que o serializador padrão.
solução de código de uma linha.
fonte
Aqui está uma classe simples que eu juntei de várias postagens ... Foi testada por cerca de 15 minutos, mas parece funcionar para meus propósitos. Ele usa
JavascriptSerializer
para fazer o trabalho, que pode ser referenciado no seu aplicativo usando as informações detalhadas nesta postagem .O código abaixo pode ser executado no LinqPad para testá-lo:
Espero que ajude!
fonte
Você pode atender facilmente aos seus requisitos usando a biblioteca Newtonsoft.Json. Estou escrevendo o exemplo abaixo e dê uma olhada nele.
Classe para o tipo de objeto que você recebe:
Código:
Essa é uma maneira muito simples de analisar seu json.
fonte
Como disse tripletdad99
mas se você não quiser criar um objeto extra que você pode fazê-lo com
Dictionary
vezfonte
adicione este ddl para fazer referência ao seu projeto: System.Web.Extensions.dll
use este espaço para nome: using System.Web.Script.Serialization;
fonte
Copie seu Json e cole na caixa de texto em json2csharp e clique no botão Gerar.
Uma classe cs será gerada usando esse arquivo cs como abaixo
Onde
RootObject
é o nome do arquivo cs gerado ;fonte
Outra maneira rápida e fácil de semi-automatizar essas etapas é:
app.quicktype.io gerou métodos de serialização com base no Newtonsoft. Como alternativa, agora você pode usar código como:
Cliente WebClient = novo WebClient ();
string myJSON = client.DownloadString (" https://URL_FOR_JSON.com/JSON_STUFF ");
var myClass = Newtonsoft.Json.JsonConvert.DeserializeObject (myJSON);
fonte
Converta uma string JSON em um objeto em C #. Usando o caso de teste abaixo ... funcionou para mim. Aqui " MenuInfo " é meu objeto de classe C #.
fonte
Primeiro você precisa incluir uma biblioteca como:
fonte