Ich habe diesen JSON:
[
{
"Attributes": [
{
"Key": "Name",
"Value": {
"Value": "Acc 1",
"Values": [
"Acc 1"
]
}
},
{
"Key": "Id",
"Value": {
"Value": "1",
"Values": [
"1"
]
}
}
],
"Name": "account",
"Id": "1"
},
{
"Attributes": [
{
"Key": "Name",
"Value": {
"Value": "Acc 2",
"Values": [
"Acc 2"
]
}
},
{
"Key": "Id",
"Value": {
"Value": "2",
"Values": [
"2"
]
}
}
],
"Name": "account",
"Id": "2"
},
{
"Attributes": [
{
"Key": "Name",
"Value": {
"Value": "Acc 3",
"Values": [
"Acc 3"
]
}
},
{
"Key": "Id",
"Value": {
"Value": "3",
"Values": [
"3"
]
}
}
],
"Name": "account",
"Id": "2"
}
]
Und ich habe diese Klassen:
public class RetrieveMultipleResponse
{
public List<Attribute> Attributes { get; set; }
public string Name { get; set; }
public string Id { get; set; }
}
public class Value
{
[JsonProperty("Value")]
public string value { get; set; }
public List<string> Values { get; set; }
}
public class Attribute
{
public string Key { get; set; }
public Value Value { get; set; }
}
Ich versuche, den obigen JSON mit dem folgenden Code zu deserialisieren:
var objResponse1 = JsonConvert.DeserializeObject<RetrieveMultipleResponse>(JsonStr);
aber ich bekomme diesen Fehler:
Das aktuelle JSON-Array (z. B. [1,2,3]) kann nicht in den Typ 'test.Model.RetrieveMultipleResponse' deserialisiert werden, da für den Typ ein JSON-Objekt (z. B. {"name": "value"}) erforderlich ist, um die Deserialisierung korrekt durchzuführen. Um diesen Fehler zu beheben, ändern Sie entweder den JSON in ein JSON-Objekt (z. B. {"name": "value"}) oder den deserialisierten Typ in ein Array oder einen Typ, der eine Auflistungsschnittstelle (z. B. ICollection, IList) wie List implementiert von einem JSON-Array deserialisiert werden. JsonArrayAttribute kann dem Typ auch hinzugefügt werden, um die Deserialisierung von einem JSON-Array zu erzwingen. Pfad '', Zeile 1, Position 1.
Wenn man Generics (in einer Erweiterungsmethode) unterstützen möchte, ist dies das Muster ...
Es wird so verwendet:
MyClassType sieht folgendermaßen aus (muss mit Name-Wert-Paaren des JSON-Arrays übereinstimmen)
Verwenden Sie NUGET, um Newtonsoft.Json herunterzuladen. Fügen Sie bei Bedarf eine Referenz hinzu ...
quelle
Ich kann der Lösung keinen Kommentar hinzufügen, aber das hat bei mir nicht funktioniert. Die Lösung, die für mich funktionierte, war:
Deserialisieren des JSON-Arrays in ein stark typisiertes .NET-Objekt
quelle
hat funktioniert!
quelle