Mit JsonConvert.DeserializeObject Json Deserialisieren, um eine C# POCO-Klasse
Hier ist meine einfache User
POCO-Klasse:
///<summary>
///The User class represents a Coderwall User.
///</summary>
public class User
{
///<summary>
///A User's username. eg: "sergiotapia, mrkibbles, matumbo"
///</summary>
public string Username { get; set; }
///<summary>
///A User's name. eg: "Sergio Tapia, John Cosack, Lucy McMillan"
///</summary>
public string Name { get; set; }
///<summary>
///A User's location. eh: "Bolivia, USA, France, Italy"
///</summary>
public string Location { get; set; }
public int Endorsements { get; set; } //Todo.
public string Team { get; set; } //Todo.
///<summary>
///A collection of the User's linked accounts.
///</summary>
public List<Account> Accounts { get; set; }
///<summary>
///A collection of the User's awarded badges.
///</summary>
public List<Badge> Badges { get; set; }
}
Und die Methode, die ich verwende Deserialisieren aus einer JSON-Antwort in eine User
Objekt (das eigentliche JSON-call ist hier):
private User LoadUserFromJson(string response)
{
var outObject = JsonConvert.DeserializeObject<User>(response);
return outObject;
}
Diese feuert eine Ausnahme:
Kann nicht deserialisiert werden die aktuellen JSON-Objekt (z.B. {"name":"Wert"})
in Typ
'System.Sammlungen.Generisches.List`1[CoderwallDotNet.Api.Modelle.Account]'
denn die Art benötigt ein JSON-array (z.B. [1,2,3]) Deserialisieren
richtig.Diesen Fehler zu beheben, ändern den JSON zu JSON-array
(z.B. [1,2,3]) oder ändern Sie die Deserialisierung-Typ, so dass es ein normales
.NET-Typ (z.B. nicht in einen primitiven Typ wie die Ganzzahl, nicht eine Sammlung
Typ wie ein array oder eine Liste), die deserialisiert werden von einem JSON
Objekt. JsonObjectAttribute können ebenfalls Hinzugefügt werden, um den Typ zu erzwingen
Deserialisieren von einem JSON-Objekt. Weg " - Konten.github', Zeile 1,
position 129.
Haben noch nie gearbeitet, mit diesem DeserializeObject Methode vor, bin ich irgendwie hier hängengeblieben.
Ich habe dafür gesorgt, dass die Namen der Eigenschaft in der POCO-Klasse sind die gleichen wie die Namen im JSON-Antwort.
Was kann ich versuchen, JSON Deserialisieren in diesem POCO-Klasse?
JsonProperty
ist viel einfacher(und lesbar), als Sie zu schreiben JsonConverter
Sie sind wahrscheinlich auf der Suche bei sowas dann. stackoverflow.com/questions/25672338/...
InformationsquelleAutor Only Bolivian Here | 2012-06-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein funktionierendes Beispiel.
Eckdaten sind:
Accounts
JsonProperty
Attribut.
-
Hast du vergessen, die Liste<> auf Rechnung, oder bin ich etwas fehlt? Es scheint mir, dass die ursprüngliche Frage hatte Konten als Liste, aber diese Lösung hat Konten als ein einzelnes Konto-Objekt... und nicht ein array, keine Liste.
Sieht aus wie das geändert
Accounts
Erklärung-vonList<Account>
zuAccount
-- ist, weil die JSON-Beispiel (der Link in der Frage) hat eine individuelle JSON-Objekt und kein array -- füraccounts
:"accounts": {"github": "sergiotapia"}
wie ist, dass eine gültige Antwort, ohne jegliche Erklärung? warum sollten wir nutzen JsonProperty, wenn der name gleich ist. JsonProperty verwendet wird, wenn die zurückgegebene Objekt hat Namen wie Abzeichen anstelle von Abzeichen. Machen Konto nicht in der Liste ist keine Lösung. denn Konten werden sollen Liste, aber es wirft Ausnahme von einigen Fällen.
InformationsquelleAutor L.B
Anderen und effizienteren Ansatz zu Deserialisieren einer camel-cased JSON-string in einen pascal-cased POCO-Objekt ist, verwenden Sie die CamelCasePropertyNamesContractResolver.
Es ist Teil des Newtonsoft.Json.Serialization-namespace. Dieser Ansatz geht davon aus, dass der einzige Unterschied zwischen dem JSON-Objekt und die POCO liegt in der Karkasse, die Namen der Eigenschaft. Wenn die property-Namen unterschiedlich geschrieben werden, dann müssen Sie greifen, um mit JsonProperty Attribute zuordnen Namen der Eigenschaft.
InformationsquelleAutor John Iwasz
Den Konten-Eigenschaft ist wie folgt definiert:
Ihre POCO-Staaten:
Versuchen Sie es mit dieser Json:
Einer Reihe von Elementen (die gehen, um abgebildet werden zu der Liste) wird immer in eckige Klammern eingeschlossen.
Edit: Das Konto Poco wird so etwas wie dieses:
und vielleicht andere Eigenschaften.
Edit 2: nicht ein array verwenden Sie die Eigenschaft wie folgt:
etwas wie die Beispiel-Klasse, die ich gebucht habe, in der ersten Bearbeitung.
InformationsquelleAutor Sascha
Könnten Sie eine
JsonConverter
. Sehen hier für ein Beispiel das ist ähnlich wie Ihre Frage.Kein problem, bin froh, dass ich helfen konnte.
InformationsquelleAutor SwDevMan81
Die ganze Meldung gibt an, dass es möglich ist, zu serialisieren, um ein List-Objekt, aber die Eingabe muss ein JSON-Liste.
Dies bedeutet, dass Ihre JSON enthalten muss
Wo AccountObject Daten ist JSON was Ihr in der Account-Objekt oder Ihr Abzeichen Objekt
Das, was es scheint zu sein, immer das derzeit ist
Denen Konten ist ein JSON-Objekt (gekennzeichnet durch geschweifte Klammern), nicht ein array von JSON-Objekten (arrays sind gekennzeichnet durch Klammern), die ist, was Sie wollen. Versuchen
Hoppla, Bearbeiten Bearbeiten Sie jetzt: Fertig. Sorry für die nicht bemerken, dass; skimming ist nicht immer optimal ;P
InformationsquelleAutor dmi_
Entlang der Linien von der akzeptierten Antworten, wenn Sie haben ein JSON-text, Beispiel-Sie können stecken Sie es in dieser Konverter, wählen Sie Ihre Optionen und generieren von C# - code.
Wenn Sie nicht wissen, den Typ zur Laufzeit, dieses Thema sieht aus wie es passen würde.
dynamisch json Deserialisieren in einem Objekt übergeben. c#
InformationsquelleAutor Jim
Ist das nicht genau das, was ich im Sinn hatte. Was tun Sie, wenn Sie einen generischen Typ nur zur Laufzeit bekannt?
InformationsquelleAutor Latency