Ich habe eine JSON-Zeichenfolge.
[
{
"target":"FDOL00001",
"datapoints":[
{
"y":72.564,
"x":1523858700
}
]
},
{
"target":"FDOL00001",
"datapoints":[
{
"y":86.366,
"x":1523858700
}
]
},
{
"target":"FDOL00001",
"datapoints":[
{
"y":73.90195818815343,
"x":1523858700
}
]
}
]
Ich versuche es zu einer Sammlung zu deserialisieren. Aber ich bekomme einen Fehler. Kann mich jemand auf den richtigen Weg bringen, um das zu beheben?
class datapoint
{
[JsonProperty("x")]
public int x { get; set; }
[JsonProperty("y")]
public decimal y { get; set; }
}
class jsonMapper
{
[JsonProperty("target")]
public string target { get; set; }
[JsonProperty("datapoints")]
public datapoint datapoints { get; set; }
}
Ich versuche mit dem folgenden Code zu konvertieren.
var json = JsonConvert.DeserializeObject<List<jsonMapper>>(objText);
Der Fehler, den ich bekomme, ist
Das aktuelle JSON-Array (z. B. [1,2,3]) kann nicht in den Typ 'ISSPortal2.datapoint' deserialisiert werden, da für den Typ ein JSON-Objekt (z. B. {"Name": "Wert"}) erforderlich ist, um die Deserialisierung korrekt durchzuführen. \ r \ nUm diesen Fehler zu beheben, ändern Sie entweder den JSON in ein JSON-Objekt (z. B. {"Name": "Wert"}) oder den deserialisierten Typ in ein Array oder einen Typ, der eine Sammlungsschnittstelle implementiert (z. B. ICollection) , IList) wie List, die aus einem JSON-Array deserialisiert werden kann. JsonArrayAttribute kann dem Typ auch hinzugefügt werden, um die Deserialisierung von einem JSON-Array zu erzwingen. \ R \ nPfad '[0] .datapoints', Zeile 1, Position 40.
Ich habe bereits dies überprüft. Aber es funktioniert nicht. Was ist falsch in meinem Code. Bitte helfen Sie mir, das zu identifizieren. Danke im Voraus :)
4 Antworten
Sie versuchen, das Array datapoint[]
in datapoint
zu deserialisieren.
Veränderung
public datapoint datapoints { get; set; }
Zu
public datapoint[] datapoints { get; set; }
Bonus: C # -Namenskonventionen empfehlen Ihnen, Großbuchstaben in öffentlichen Objekten zu verwenden.
class Datapoint
{
[JsonProperty("x")]
public int X { get; set; }
[JsonProperty("y")]
public decimal Y { get; set; }
}
class JsonMapper
{
[JsonProperty("target")]
public string Target { get; set; }
[JsonProperty("datapoints")]
public Datapoint Datapoints { get; set; }
}
Sie müssen datapoints
als eine Sammlung einer Art deklarieren (z. B. eine IEnumerable
oder eine IList
).
class jsonMapper
{
[JsonProperty("target")]
public string target { get; set; }
// This has changed to IEnumerable<datapoint>
[JsonProperty("datapoints")]
public IEnumerable<datapoint> datapoints { get; set; }
}
Ihre Klassen sollten so sein:
public class datapoint
{
[JsonProperty("x")]
public int x { get; set; }
[JsonProperty("y")]
public decimal y { get; set; }
}
public class jsonMapper
{
[JsonProperty("target")]
public string target { get; set; }
[JsonProperty("datapoints")]
public List<datapoint> datapoints { get; set; }
}
In Ihrer JSON-Zeichenfolge wird die Eigenschaft datapoints
für jedes jsonMapper
Objekt in eckige Klammern ([]
) eingeschlossen, und dann wird datapoints
als Sammlungsobjekt anstelle eines einzelnen Objekts interpretiert. Ihre jsonMapper-Klasse ist
class jsonMapper
{
[JsonProperty("target")]
public string target { get; set; }
[JsonProperty("datapoints")]
public datapoint datapoints { get; set; }
}
Und die Eigenschaft datapoints
ist kein Array oder Sammlungsobjekt.
Sie können Ihre Eigenschaft von public datapoint datapoints { get; set; };
in
ändern public List<datapoint> datapoints { get; set; };
oder Sie können eckige Klammern ([]
) aus Ihrer JSON-Zeichenfolge entfernen.
Verwandte Fragen
Verknüpfte Fragen
Neue Fragen
c#
C # (ausgesprochen "siehe scharf") ist eine statische Typisierungsprogrammiersprache mit mehreren Paradigmen, die von Microsoft entwickelt wurde. C # -Code zielt normalerweise auf die .NET-Tools und -Laufzeiten von Microsoft ab, zu denen unter anderem .NET Framework, .NET Core und Xamarin gehören. Verwenden Sie dieses Tag für Fragen zu Code, der in der formalen Spezifikation von C # oder C # geschrieben ist.