Ich habe folgenden Code:
var user = (Dictionary<string, object>)serializer.DeserializeObject(responsecontent);
Die Eingabe in responsecontent
ist JSON, wird jedoch nicht ordnungsgemäß in ein Objekt analysiert. Wie soll ich es richtig deserialisieren?
Json
inSystem.Web.Helpers
, es gibtJsonQueryStringConverter
inSystem.ServiceModel.Web
, es gibtJavascriptSerializer
inSystem.Web.Script.Serialization
,DataContractJsonSerializer
inSystem.Runtime.Serialization.Json
, zum Teufel MS hat sogar beschlossen, DritteJson.NET
in seine ASP.NET-Web-API aufzunehmen. Wenn Sie dachten, dass das nicht genug ist, kommt MS auf den Markt, istSystem.Json
aber derzeit nicht für den Konsum geeignet. Weiter so Microsoft Weiter so .... Ich wähle nach dem am besten aussehenden Namespace.JsonValue
inWindows.Data.Json
dem nur für Windows 8 und höher. Ich liebe es. MS ist auf einer Mission :)Antworten:
Ich gehe davon aus, dass Sie Json.NET (Newtonsoft.Json NuGet-Paket) nicht verwenden. Wenn dies der Fall ist, sollten Sie es versuchen.
Es hat die folgenden Funktionen:
Schauen Sie sich das folgende Beispiel an . In diesem Beispiel wird die
JsonConvert
Klasse verwendet, um ein Objekt in und aus JSON zu konvertieren. Zu diesem Zweck gibt es zwei statische Methoden. Sie sindSerializeObject(Object obj)
undDeserializeObject<T>(String json)
:quelle
var
Typvariable deserialisieren, falls ich die vollständige Struktur meines Ziels nicht kenne? Insbesondere konsumiere ich Rally User Stories und möchte sie in Objekte konvertieren.JSON.parse('{"Expiry": "2008-12-28T00:00:00"}').Expiry
gibt die Zeichenfolge zurück"2008-12-28T00:00:00"
, kein Datum. Es kann in einDate
Via umgewandelt werdennew Date(str)
,JSON.parse
weiß aber nichts über Daten. Sie müssten einen Reviver übergeben, der jeden einzelnen Zeichenfolgenwert mit einem Muster vergleicht.require
,include
,import
oderusing
Aussagen in ihren Antworten. Würde diese eine Zeile weh tun?Wie hier beantwortet - JSON in dynamisches C # -Objekt deserialisieren?
Mit Json.NET ist das ganz einfach:
Oder mit Newtonsoft.Json.Linq:
quelle
object
, und Sie können die Indizierung für a nicht verwendenobject
.Hier sind einige Optionen ohne Verwendung von Bibliotheken von Drittanbietern:
Weitere Informationen zu System.Web.Helpers.Json finden Sie unter dem Link .
Update : Heutzutage ist es am einfachsten,
Web.Helpers
das NuGet-Paket zu verwenden .Wenn Sie sich nicht für frühere Windows-Versionen interessieren, können Sie die Klassen des
Windows.Data.Json
Namespace verwenden:quelle
Wenn Ihnen .NET 4 zur Verfügung steht, lesen Sie Folgendes: http://visitmix.com/writings/the-rise-of-json (archive.org)
Hier ist ein Ausschnitt von dieser Seite:
Diese letzte Console.WriteLine ist ziemlich süß ...
quelle
Eine weitere native Lösung hierfür, für die keine Bibliotheken von Drittanbietern erforderlich sind, sondern auf System.Web.Extensions verwiesen wird, ist der JavaScriptSerializer. Dies ist keine neue, aber eine sehr unbekannte integrierte Funktion seit 3.5.
..
und zurück
quelle
Sie können sich auch den DataContractJsonSerializer ansehen
quelle
System.Json funktioniert jetzt ...
Installieren Sie nuget https://www.nuget.org/packages/System.Json
Beispiel :
quelle
Verwenden Sie dieses Tool, um eine Klasse zu generieren, die auf Ihrem JSON basiert:
http://json2csharp.com/
Und dann verwenden Sie die Klasse, um Ihren JSON zu deserialisieren. Beispiel:
Referenzen: 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
quelle
Versuchen Sie den folgenden Code:
quelle
System.Text.Json
.NET Core 3.0
System.Text.Json
ist integriert. Dies bedeutet, dass Sie JSON ohne Verwendung einer Bibliothek eines Drittanbieters deserialisieren / serialisieren können .So serialisieren Sie Ihre Klasse (n) in eine JSON-Zeichenfolge:
So deserialisieren Sie den JSON in eine stark typisierte Klasse:
Wenn Sie also eine Klasse wie die folgende haben:
Beachten Sie, dass JSON-Eigenschaften bei Verwendung Ihres eigenen Codes
System.Text.Json
nicht automatisch verarbeitet werden (bei Verwendung von MVC / WebAPI-Anforderungen und des Modellbinders).camelCase
Um dies zu beheben, müssen Sie
JsonSerializerOptions
als Parameter übergeben.System.Text.Json ist auch für .Net Framework und .Net Standard als Nu-get-Paket System.Text.Json verfügbar
quelle
JsonDocument.Parse
.Das Folgende von der msdn- Site sollte meiner Meinung nach dazu beitragen, einige native Funktionen für das bereitzustellen, wonach Sie suchen. Bitte beachten Sie, dass es für Windows 8 spezifiziert ist. Ein solches Beispiel von der Site ist unten aufgeführt.
Es verwendet den Windows.Data.JSON- Namespace.
quelle
Sie können folgende Erweiterungen verwenden
quelle
Ich denke, die beste Antwort, die ich gesehen habe, war @MD_Sayem_Ahmed.
Ihre Frage lautet "Wie kann ich Json mit C # analysieren?", Aber anscheinend möchten Sie Json entschlüsseln. Wenn Sie es entschlüsseln möchten, ist Ahmeds Antwort gut.
Wenn Sie dies in ASP.NET Web Api versuchen, können Sie am einfachsten ein Datenübertragungsobjekt erstellen, das die Daten enthält, die Sie zuweisen möchten:
Sie müssen Ihrer Anfrage einfach den Header application / json hinzufügen (wenn Sie beispielsweise Fiddler verwenden). Sie würden dies dann in der ASP.NET-Web-API wie folgt verwenden:
Dies hat mir sehr geholfen, als ich in meiner Web-API gearbeitet habe und mein Leben super einfach gemacht hat.
quelle
quelle
quelle
System.Web
in Ihre Projektreferenzen aufzunehmen.quelle