Mam następujący kod:
var user = (Dictionary<string, object>)serializer.DeserializeObject(responsecontent);
Dane wejściowe responsecontent
to JSON, ale nie są one poprawnie analizowane w obiekcie. Jak powinienem właściwie to zrobić z postaci szeregowej?
Json
wSystem.Web.Helpers
, jestJsonQueryStringConverter
wSystem.ServiceModel.Web
, jestJavascriptSerializer
wSystem.Web.Script.Serialization
,DataContractJsonSerializer
wSystem.Runtime.Serialization.Json
, cholery MS nawet postanowiła włączyć osobę trzeciąJson.NET
w ASP.NET Web API. Jeśli myślałeś, że to nie wystarczy, MS wymyśliło,System.Json
ale obecnie nie nadaje się do spożycia. Way to go Microsoft way to go ... Wybieram według najlepiej wyglądającej przestrzeni nazw.JsonValue
wWindows.Data.Json
którym jest tylko dla systemu Windows 8 i nowszych. Uwielbiam to. MS jest na misji :)Odpowiedzi:
Zakładam, że nie korzystasz z Json.NET (pakiet Newtonsoft.Json NuGet). W takim przypadku powinieneś spróbować.
Ma następujące funkcje:
Spójrz na poniższy przykład . W tym przykładzie
JsonConvert
klasa służy do konwersji obiektu na i z JSON. Ma dwie metody statyczne w tym celu. SąSerializeObject(Object obj)
iDeserializeObject<T>(String json)
:źródło
var
zmiennej typu, w przypadku gdy nie znam pełnej struktury mojego celu? W szczególności konsumuję Historie użytkowników Rally i chcę je przekształcić w obiekty.JSON.parse('{"Expiry": "2008-12-28T00:00:00"}').Expiry
zwraca ciąg"2008-12-28T00:00:00"
, a nie datę. może być przekształconyDate
poprzeznew Date(str)
, aleJSON.parse
nie wie nic o terminach. Będziesz musiał przekazać Reviver, który sprawdził każdą wartość ciągu względem wzorca.require
,include
,import
lubusing
oświadczenia w swoich odpowiedziach. Czy ta jedna linia boli?Jak tu odpowiedziano - Deserializować JSON w obiekt dynamiczny C #?
Korzystanie z Json.NET jest dość proste:
Lub używając Newtonsoft.Json.Linq:
źródło
object
i nie można używać indeksowania naobject
.Oto kilka opcji bez korzystania z bibliotek stron trzecich:
Zobacz link, aby uzyskać więcej informacji o System.Web.Helpers.Json .
Aktualizacja : w dzisiejszych czasach najłatwiejszym sposobem uzyskania dostępu
Web.Helpers
jest użycie pakietu NuGet .Jeśli nie zależy ci na wcześniejszych wersjach systemu Windows, możesz użyć klas
Windows.Data.Json
przestrzeni nazw:źródło
Jeśli .NET 4 jest dostępny, sprawdź: http://visitmix.com/writings/the-rise-of-json (archive.org)
Oto fragment tej witryny:
Ostatnia konsola WriteLine jest całkiem słodka ...
źródło
Innym rodzimym rozwiązaniem tego problemu, które nie wymaga żadnych bibliotek stron trzecich, ale odniesieniem do System.Web.Extensions jest JavaScriptSerializer. To nie jest nowa, ale bardzo nieznana wbudowana funkcja tam od 3.5.
..
i z powrotem
źródło
Możesz także rzucić okiem na DataContractJsonSerializer
źródło
System.Json działa teraz ...
Zainstaluj nuget https://www.nuget.org/packages/System.Json
Próbka :
źródło
Użyj tego narzędzia, aby wygenerować klasę opartą na twoim jsonie:
http://json2csharp.com/
A następnie skorzystaj z klasy, aby dokonać deserializacji swojego Jsona. Przykład:
Odnośniki: https://forums.asp.net/t/1992996.aspx?Nested+Json+Deserialization+to+C+object+and+using+that+object https://www.newtonsoft.com/json/help /html/DeserializeObject.htm
źródło
Wypróbuj następujący kod:
źródło
System.Text.Json
.NET core 3.0 ma
System.Text.Json
wbudowane, co oznacza, że możesz dokonać deserializacji / serializacji JSON bez korzystania z biblioteki innej firmy.Aby serializować swoje klasy do ciągu JSON:
Aby deserializować JSON w silnie typowaną klasę:
Więc jeśli masz klasę jak poniżej:
Należy zauważyć, że
System.Text.Json
nie używa automatyczniecamelCase
właściwości JSON podczas korzystania z własnego kodu (jednak dzieje się tak przy korzystaniu z żądań MVC / WebAPI i segregatora modeli).Aby rozwiązać ten problem, musisz podać
JsonSerializerOptions
jako parametr.System.Text.Json jest również dostępny dla .Net Framework i .Net Standard jako pakiet Nu-get System.Text.Json
źródło
JsonDocument.Parse
.Poniższe informacje z witryny msdn powinny pomóc zapewnić natywną funkcjonalność tego, czego szukasz. Należy pamiętać, że jest on określony dla systemu Windows 8. Jeden taki przykład ze strony znajduje się poniżej.
Wykorzystuje przestrzeń nazw Windows.Data.JSON .
źródło
Możesz użyć następujących rozszerzeń
źródło
Myślę, że najlepszą odpowiedzią, jaką widziałem, jest @MD_Sayem_Ahmed.
Twoje pytanie brzmi: „Jak mogę parsować Jsona za pomocą C #”, ale wygląda na to, że chcesz zdekodować Jsona. Jeśli chcesz go zdekodować, odpowiedź Ahmeda jest dobra.
Jeśli próbujesz to osiągnąć w interfejsie ASP.NET Web Api, najprostszym sposobem jest utworzenie obiektu do przesyłania danych, który przechowuje dane, które chcesz przypisać:
Po prostu dodajesz nagłówek application / json do swojego żądania (jeśli na przykład używasz Fiddlera). Następnie użyłbyś tego w ASP.NET Web API w następujący sposób:
Bardzo mi to pomogło, gdy pracowałem w interfejsie internetowym i uczyniłem moje życie bardzo łatwym.
źródło
źródło
źródło
System.Web
referencji projektu.źródło