Existe uma maneira fácil de preencher o meu objeto C # com o objeto JSON passado via AJAX?
Este é o objeto JSON passado para o C # WEBMETHOD a partir da página usando JSON.stringify
{
"user": {
"name": "asdf",
"teamname": "b",
"email": "c",
"players": ["1", "2"]
}
}
C # WebMetod que recebe o objeto JSON
[WebMethod]
public static void SaveTeam(Object user)
{
}
Classe C # que representa a estrutura do objeto JSON passada para o WebMethod
public class User
{
public string name { get; set; }
public string teamname { get; set; }
public string email { get; set; }
public Array players { get; set; }
}
Respostas:
Uma boa maneira de usar JSON em C # é com JSON.NET
Início rápido e documentação da API da do JSON.NET - Site oficial para ajudá-lo a trabalhar com ele.
Um exemplo de como usá-lo:
fonte
Uma vez que todos nós amamos um código de liners
Newtonsoft é mais rápido que o serializador de scripts java. ... este depende do pacote Newtonsoft NuGet, que é popular e melhor que o serializador padrão.
se tivermos classe, use abaixo.
nenhuma classe então use dinâmico
fonte
Para manter suas opções abertas, se você estiver usando o .NET 3.5 ou posterior, aqui está um exemplo finalizado que você pode usar diretamente da estrutura usando Genéricos. Como outros já mencionaram, se não são apenas objetos simples, você realmente deve usar o JSON.net.
Você precisará:
fonte
Dado seu exemplo de código, você não precisa fazer mais nada.
Se você passar essa cadeia JSON para o seu método da web, ela analisará automaticamente a cadeia JSON e criará um objeto User preenchido como o parâmetro para o seu método SaveTeam.
Geralmente, porém, você pode usar a
JavascriptSerializer
classe como abaixo, ou para obter mais flexibilidade, use qualquer uma das várias estruturas Json existentes (o Jayrock JSON é bom) para facilitar a manipulação do JSON.fonte
System.Web.Extensions
montagem e adicionar ausing System.Web.Script.Serialization
para chegar aoJavaScriptSerializer
, mas, quando o fizer, essa parece ser a maneira mais limpa de desserializar suasjson
seqüências de caracteres em classes concretas do c #.Outra solução realmente simples é usar a biblioteca Newtonsoft.Json:
fonte
Os 2 exemplos a seguir fazem uso de qualquer
Exemplo 1: usando System.Web.Script.Serialization
Uso: objeto JSON para objeto C # personalizado
Exemplo 2: usando System.Web.Helpers
Uso: objeto JSON para objeto C # personalizado
Esse código requer a adição do namespace System.Web.Helpers encontrado em,
Ou
Espero que isto ajude!
fonte
dynamic
tipos, você não recebe nenhuma verificação de tipo verdadeira. Por exemplo, se o seu JSON contiver"Name" : "Ahmed"
e você digitar incorretamente "Nome" no seu código C #, será um erro de tempo de execução (bleh).Mais informações, acesse o link a seguir http://ishareidea.blogspot.in/2012/05/json-conversion.html
Sobre
DataContractJsonSerializer Class
você pode ler aqui .fonte
O uso de JavaScriptSerializer () é menos rigoroso do que a solução genérica oferecida: public static T Deserialize (string json)
Isso pode ser útil ao passar o json para o servidor que não corresponde exatamente à definição de objeto na qual você está tentando converter.
fonte
Em termos de desempenho, achei o serializador do ServiceStack um pouco mais rápido que os outros. É a classe JsonSerializer no espaço de nome ServiceStack.Text.
https://github.com/ServiceStack/ServiceStack.Text
O ServiceStack está disponível no pacote NuGet: https://www.nuget.org/packages/ServiceStack/
fonte
JSON.Net é sua melhor aposta, mas, dependendo da forma dos objetos e se existem dependências circulares, você pode usar JavaScriptSerializer ou DataContractSerializer.
fonte
O gerador de classe JSON C # no codeplex gera classes que funcionam bem com o NewtonSoftJS.
fonte
Serializador de JavaScript: requer
using System.Web.Script.Serialization;
Serializador de contrato de dados: requer
using System.Runtime.Serialization.Json;
- O tipo genérico T deve ser serializado mais no contrato de dadosfonte
Em vez de enviar apenas como um objeto.
Crie uma classe pública de propriedades acessíveis e envie os dados para o Webmethod.
use os mesmos nomes de parâmetros na chamada ajax para enviar dados.
fonte