Próba konwersji ciągu JSON na obiekt w C #. Za pomocą bardzo prostego przypadku testowego:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
Problem polega na tym, że lista tras nigdy nie jest ustawiana; to niezdefiniowany obiekt. Jakieś pomysły?
JavaScriptSerializer
wersję MS, ponieważ nie akceptuje nic poza niestandardowym formatowaniem JSON w WCF (np. Pola daty, które wyglądają jak daty, ale nie są otoczone DATE () źle zawodzą)Odpowiedzi:
Wygląda na to, że próbujesz deserializować do surowego obiektu. Możesz utworzyć klasę reprezentującą obiekt, na który konwertujesz. Byłoby to najbardziej przydatne w przypadkach, gdy masz do czynienia z większymi obiektami lub ciągami JSON.
Na przykład:
Twój kod deserializacji to:
Więcej informacji można znaleźć w tym samouczku: http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-Csharp.aspx
źródło
Lub możesz użyć biblioteki Newtownsoft.Json w następujący sposób:
Gdzie
T
jest typ obiektu, który pasuje do ciągu JSON.źródło
Prawdopodobnie nie chcesz po prostu deklarować listy tras jako
object
typu. Nie ma właściwości .test, więc naprawdę nie odzyskasz ładnego obiektu. Jest to jedno z tych miejsc, w których lepiej byłoby zdefiniować klasę lub strukturę lub skorzystać z dynamicznego słowa kluczowego.Jeśli naprawdę chcesz, aby ten kod działał tak, jak go masz, musisz wiedzieć, że obiekt zwrócony przez DeserializeObject jest ogólnym słownikiem ciągów znaków, obiekt. Oto kod, aby to zrobić w ten sposób:
Jeśli chcesz użyć dynamicznego słowa kluczowego, możesz przeczytać tutaj .
Jeśli zadeklarujesz klasę lub strukturę, możesz wywołać Deserialize zamiast DeserializeObject w następujący sposób:
źródło
object routes_list
. Użyjvar
lub jawnie powtórz się i zadeklaruj listę tras jako IDictionary <ciąg, obiekt>.Używanie obiektu dynamicznego z JavaScriptSerializer.
źródło
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.
rozwiązanie z jednym kodem linii.
źródło
Oto prosta klasa, którą zebrałem z różnych postów ... Testowano ją przez około 15 minut, ale wydaje się, że działa dla moich celów. Służy
JavascriptSerializer
do wykonywania pracy, do której można się odwoływać w aplikacji, korzystając z informacji wyszczególnionych w tym poście .Poniższy kod można uruchomić w LinqPad, aby go przetestować:
Mam nadzieję, że to pomoże!
źródło
Możesz łatwo spełnić swoje wymagania, korzystając z biblioteki Newtonsoft.Json. Piszę jeden przykład poniżej, spójrz na to.
Klasa dla rodzaju otrzymywanego obiektu:
Kod:
jest to bardzo prosty sposób na parsowanie twojego Jsona.
źródło
Jak powiedział tripletdad99
ale jeśli nie chcesz, aby utworzyć dodatkowy przedmiot można zrobić to z
Dictionary
zamiastźródło
dodaj ten plik ddl do odwołania do projektu: System.Web.Extensions.dll
użyj tej przestrzeni nazw: using System.Web.Script.Serialization;
źródło
Skopiuj Jsona i wklej w polu tekstowym na json2csharp i kliknij przycisk Generuj.
Zostanie wygenerowana klasa cs przy użyciu tego pliku cs jak poniżej
Gdzie
RootObject
jest nazwa wygenerowanego pliku cs ;źródło
Innym szybkim i łatwym sposobem na częściową automatyzację tych kroków jest:
app.quicktype.io wygenerował metody serializacji w oparciu o Newtonsoft. Alternatywnie możesz teraz użyć kodu takiego jak:
Klient WebClient = nowy WebClient ();
ciąg myJSON = client.DownloadString („ https://URL_FOR_JSON.com/JSON_STUFF ”);
var myClass = Newtonsoft.Json.JsonConvert.DeserializeObject (myJSON);
źródło
Konwertuj ciąg JSON na obiekt w C #. Za pomocą poniższego przypadku testowego .. to zadziałało dla mnie. Tutaj „ MenuInfo ” to mój obiekt klasy C #.
źródło
Najpierw musisz dołączyć bibliotekę:
źródło