Czy istnieje prosty sposób na wypełnienie mojego obiektu C # obiektem JSON przekazanym przez AJAX?
Jest to obiekt JSON przekazany do C # WEBMETHOD ze strony przy użyciu JSON.stringify
{
"user": {
"name": "asdf",
"teamname": "b",
"email": "c",
"players": ["1", "2"]
}
}
C # WebMetod, który odbiera obiekt JSON
[WebMethod]
public static void SaveTeam(Object user)
{
}
Klasa C # reprezentująca strukturę obiektową obiektu JSON przekazanego do WebMethod
public class User
{
public string name { get; set; }
public string teamname { get; set; }
public string email { get; set; }
public Array players { get; set; }
}
Odpowiedzi:
Dobrym sposobem na użycie JSON w C # jest JSON.NET
Szybki start i dokumentacja API z JSON.NET - oficjalna strona pomaga w pracy z nim.
Przykład, jak z niego korzystać:
źródło
Ponieważ wszyscy kochamy jeden kod liniowy
Newtonsoft jest szybszy niż serializator skryptów Java. ... ten zależy od pakietu Newtonsoft NuGet, który jest popularny i lepszy niż domyślny serializator.
jeśli mamy klasę, użyj poniżej.
żadna klasa nie używa dynamiki
źródło
Aby pozostawić otwarte opcje, jeśli korzystasz z .NET 3.5 lub nowszego, oto zawarty przykład, którego możesz użyć bezpośrednio z frameworka za pomocą Generics. Jak wspomnieli inni, jeśli nie są to tylko proste obiekty, naprawdę powinieneś używać JSON.net.
Będziesz potrzebował:
źródło
Biorąc pod uwagę przykładowy kod, nie powinieneś robić nic więcej.
Jeśli przekażesz ten ciąg JSON do metody internetowej, automatycznie przeanalizuje on ciąg JSON i utworzy zapełniony obiekt użytkownika jako parametr dla metody SaveTeam.
Ogólnie jednak możesz użyć tej
JavascriptSerializer
klasy, jak poniżej, lub dla większej elastyczności, użyć dowolnego z dostępnych frameworków Json (Jayrock JSON jest dobry) dla łatwej manipulacji JSON.źródło
System.Web.Extensions
zestawu i dodać,using System.Web.Script.Serialization
aby dostać się doJavaScriptSerializer
, ale kiedy to zrobisz, wydaje się to najczystszym sposobem na deserializację swoichjson
ciągów w c # konkretnych klas.Innym naprawdę prostym rozwiązaniem jest użycie biblioteki Newtonsoft.Json:
źródło
Poniższe 2 przykłady wykorzystują oba
Przykład 1: użycie System.Web.Script.Serialization
Zastosowanie: Obiekt JSON na niestandardowy obiekt C #
Przykład 2: użycie System.Web.Helpers
Zastosowanie: Obiekt JSON na niestandardowy obiekt C #
Ten kod wymaga dodania przestrzeni nazw System.Web.Helpers w,
Lub
Mam nadzieję że to pomoże!
źródło
dynamic
typów nie można sprawdzić prawdziwego typu. Na przykład, jeśli Twój JSON zawiera"Name" : "Ahmed"
i źle wpisujesz „Nazwa” w kodzie C #, jest to błąd czasu wykonania (bleh).Więcej informacji można znaleźć pod następującym linkiem http://ishareidea.blogspot.in/2012/05/json-conversion.html
O
DataContractJsonSerializer Class
tym możesz przeczytać tutaj .źródło
Korzystanie z JavaScriptSerializer () jest mniej rygorystyczne niż oferowane ogólne rozwiązanie: public static T Deserialize (string json)
Może się to przydać przy przekazywaniu jsona na serwer, który nie odpowiada dokładnie definicji obiektu, na którą próbujesz przekonwertować.
źródło
Pod względem wydajności znalazłem serializator ServiceStack nieco szybciej niż inne. To klasa JsonSerializer w przestrzeni nazw ServiceStack.Text.
https://github.com/ServiceStack/ServiceStack.Text
ServiceStack jest dostępny za pośrednictwem pakietu NuGet: https://www.nuget.org/packages/ServiceStack/
źródło
JSON.Net jest najlepszym rozwiązaniem, ale w zależności od kształtu obiektów i zależności między kołami można użyć JavaScriptSerializer lub DataContractSerializer.
źródło
JSON C # klasa generator na CodePlex generuje klas, które działają dobrze z NewtonSoftJS.
źródło
JavaScript Serializer: wymaga
using System.Web.Script.Serialization;
Serializer kontraktu danych: wymaga
using System.Runtime.Serialization.Json;
- Ogólny typ T powinien być możliwy do serializacji w większym stopniu na kontrakcie danychźródło
Zamiast wysyłać jako przedmiot.
Utwórz publiczną klasę właściwości, która jest dostępna, i wyślij dane do metody internetowej.
użyj tych samych nazw parametrów w wywołaniu ajax, aby wysłać dane.
źródło