2009-08-26 14 views
22

jak rozszyfrować odpowiedź json w języku C#?Dekodowanie JSON w C#

+0

"tablica": o której macie mówić? –

+0

Sprawdź również http://stackoverflow.com/questions/2246694/how-to-convert-json-object-to-custom-c-sharp-object jeden z przykładów w kierunku dolnych odnośników 'Json.Decode()' z 'System.Web.Helpers', z którego z powodzeniem korzystałem w przeszłości. –

+0

Zamknięcie pytania, po 4 latach, czekaj ... to jest SO. –

Odpowiedz

22

Zapoznaj się z DataContractJsonSerializer. Będziesz musiał kierować na platformę .NET 3.5, co oznacza, że ​​Visual Studio 2008 jest prawie wymagane. Here's a good blog post o korzystaniu z serializatora kontraktu danych Json.

+2

haha ​​pokonał mnie 20 sekund! –

+1

Dostępna jest wersja [.Net 4 DataContractJsonSerializer] (http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer.aspx). – MrBry

5
+0

Pisałem check-out, ale źle wpisałem, a następnie wykonałem całą linię ponownie. lol –

+1

dziękuję wszystkim .. nie jestem o wiele bardziej rodzinny z .net i potrzebuję użyć danych json. Więc byłoby dobrze, gdyby ktokolwiek mógł podać przykładowy kod stwierdzający, jak rozszyfrować dane json. – raki

3

Klasy zintegrowane .NET mają swoje zalety. Ale mają swoje wady.

Na przykład DataContractJsonSerializer nie jest dostępny w .NET 2.0, System.Web.Extensions potrzebuje uprawnień administratora, aby go zainstalować (w NET 2.0 - możesz go skopiować lokalnie, jeśli nie masz projektu WebSite) i robi to Działa w SilverLight i Windows Phone. Jeśli masz projekt WebSite, musisz skopiować zestawy System.Web.Extensions do swojego projektu i usunąć je później z GAC, w przeciwnym razie VisualStudio nie zrozumie, że musi je skopiować lokalnie.

Co ważniejsze, jeśli pracujesz z praktycznie dowolną biblioteką JavaScript, np. SlickGrid (AJAX siatki), można natknąć się na tego ważnego obiektu JavaScript (ale to nieważne JSON, ponieważ fnFormatDate_DE jest wywołanie funkcji, a nie tekst, brakuje cudzysłowów):

FormatterCallback : 
{ 
    name : "DateFormatter_DE" 
    func: fnFormatDate_DE(val) 
} 

nie ma szans do serializacji to z dowolne zintegrowane klasy .NET (ponieważ jest to niepoprawny JSON). Ponadto nie są one pod względem wydajności, dostępności w SilverLight, Windows Phone i WindowsRT. Nie są to licencje OpenSource ani MIT. Nie mają wsparcia dla wcięć (czytelny dla użytkownika JSON) i nie mogą serializować tabel DataTables i mają problemy z odwołaniami cyklicznymi. Nie możesz obsłużyć błędów serializacji, nie możesz serializować nazw ich nazw i nie możesz zmienić formatu daty (OK, to naprawdę nie jest problem, ponieważ format daty MS to jedyny format daty safari Crap rozumie, że [nie narusza ISO]) i nie dokonują one selekcji nHibernate ani Entity ...

Ale co najważniejsze, nie będziesz chciał przełączać biblioteki ani dostosowywać odniesień do projektu, jeśli przejdziesz od .NET 2.0 do 4.0, nie chcesz przepisywać kodu, jeśli chcesz użyć jakiegoś kodu w SilverLight/Windows Phone, i nie chcesz pisać funkcji upiększania JSON, jeśli chcesz sprawdzić, czy masz prawo do klasy, a nie będziesz chciał pisać własnej metody usuwania cudzysłowów tylko dlatego, że biblioteki Microsoft nie są w stanie obsłużyć nieprawidłowego JSON.

Ponadto, biblioteki Microsoft mają niską wydajność i nie mogą serializować do BSON (do użytku z bazami danych NoSQL, takimi jak MongoDB).
Z tych wszystkich powodów lepiej wybrać NewtonSoft JSON (JSON.NET).
Jest bezpłatny i OpenSource (MIT license, a nie GPL).
Jest tu niezła macierz porównania:
http://james.newtonking.com/pages/json-net.aspx

+0

Idź przez: https://github.com/dotnet/corefx-progress/blob/master/src-diff/README.md, 'System.Runtime.Serialization.Json' będzie dostępny w wersji open-source i dostępny w repozytorium corefx: https://github.com/dotnet/corefx (w ramach licencji MIT, podobnie jak wszystkie inne biblioteki .NET wylądowały tam). –