Wie um zu überprüfen, ob eine variable ein Array oder Objekt?
Für deserialising ein json-Objekt, ich hatte zum definieren eines übergeordneten Klasse enthalten würde, die ein Objekt oder ein array von Objekten für die Kind-Klasse. Es muß sich um ein Objekt wenn Sie ein Objekt abgerufen wurde, oder ein array von Objekten, wenn ein array abgerufen wurde von der json.
JSON-array-Objekt
{"y":{"x":[{"data":28}, {"data":56}, {"data":89}]}}
JSON-Objekt
{"y":{"x":{"data":28}}}
y ist, erhalten x und x[] zu einem anderen Zeitpunkt. Es gibt keine solche Bedingung, um zu ermitteln, ob y würde erhalten ein array oder ein Objekt.
Daher für die Bestimmung, ob erhielt ich ein array ist oder nicht, ich bin der überprüfung der IsArray () - Bedingung.
Versuchte ich
class Y
{
public X x { get { return System.IsArray() ? new X() : new x[] }; set; }
}
class X
{
public int data { get; set; }
}
- Es nicht funktioniert.
- System.IsArray() nicht erkannt wird??
- Sie haben die Kontrolle über die Logik erzeugt, dass der JSON? Wenn ja, sollten Sie überlegen, die Neugestaltung der Daten-Objekte zu Folgen, einen standard-Vertrag. Eine Eigenschaft, die manchmal ist ein einzelnes Objekt und manchmal auch ein array ist ein schlechtes design und problematisch auf lange Sicht. Wenn Sie die Möglichkeit haben, sollten Sie genau überlegen, so dass es ein array und bauen Sie Ihr Objekt-Modellen zu berücksichtigen.
- IsArray prüft auf eine
Type
. Sie sollten überprüfen Sie es auf das Objekt, das Sie überprüfen möchten, nicht aufSystem
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
First off, wird ein array ist ein Objekt. Das ist eine gute Sache, da Sie es ermöglicht, diese Funktionen zu arbeiten (beide übernehmen
using System;
):Sekunde, wenn Sie wollen eine Immobilie, deren Typ kann entweder
X
oderX[]
, den Typ der Eigenschaft sein mussobject
:Diese etwas ignoriert den Vorteil, statische Typisierung, wie Sie mit
object
und Prüfung von Typen zur Laufzeit. Es wäre wirklich viel einfacher, definieren Sie die Eigenschaft, wie ein array, auch für diejenigen Fälle, in denen es nur einen Wert. In solchen Fällen wäre es ein array, dessen Länge 1.Habe ich mit der Json.NET Nuget-Paket, und es ist wirklich einfach, mit zu arbeiten:
Hoffe, das hilft!
die Eigenschaft x des Typs X in der Klasse Y kann nicht sein, ein array von X, wenn Sie ausdrücklich Staates, es ist von Typ X. er erklärt es als ein Objekt wäre ein Weg, um diese.
Wenn Sie überprüfen möchten, es ist ein array, das ich verwenden würde ein Feld sichern (sagen _x) und dann, wo Sie die Nutzung der Immobilie überprüfen (
typeof(_x) == X[]
)Könnte chaotisch obwohl, wäre mein Rat, legen Sie die Art der Immobilie x X[] und im Satz bestimmen, ob der Wert ein array (wenn ja, setzen Sie einfach
_x = value
) oder wenn nicht-Wert hinzufügen, um ein leeres array von X