Wie überprüft man, ob eine Variable Array oder Objekt ist?

9

Um ein json-Objekt zu deserialisieren, musste ich eine Elternklasse definieren, die ein Objekt oder ein Array von Objekten für die Kindklasse enthalten würde. Es muss ein Objekt sein, wenn ein Objekt abgerufen wurde, oder ein Array von Objekten, wenn ein Array vom json abgerufen wurde.

JSON-Array-Objekt

%Vor%

JSON-Objekt

%Vor%

y empfängt x zu einem Zeitpunkt und x [] zu einem anderen Zeitpunkt. Es gibt keine solche Bedingung, um zu bestimmen, ob y ein Array oder ein Objekt erhalten würde.

Um festzustellen, ob ich ein Array erhalten habe oder nicht, prüfe ich daher die IsArray () - Bedingung.

Ich habe es versucht

%Vor%
  1. Es funktioniert nicht.
  2. System.IsArray () wird nicht erkannt?
anurag 12.04.2012, 06:16
quelle

3 Antworten

13

Zunächst ist ein Array ein Objekt. Das ist eine gute Sache, da diese Funktionen funktionieren können (beide davon ausgehen, using System; ):

%Vor%

Zweitens, wenn Sie eine Eigenschaft haben wollen, deren Typ entweder X oder X[] sein kann, muss der Typ der Eigenschaft object sein:

%Vor%

Dadurch wird der Vorteil der statischen Typisierung etwas ignoriert, da Sie object verwenden und Typen zur Laufzeit überprüfen. Es wäre wirklich viel einfacher, die Eigenschaft als ein Array zu definieren, selbst für die Fälle, in denen es nur einen Wert gibt. In solchen Fällen wäre es ein Array mit der Länge 1.

    
phoog 12.04.2012, 06:38
quelle
4

Ich habe das Json.NET Nuget-Paket verwendet und es war wirklich einfach, damit zu arbeiten:

%Vor%

Hoffe, das hilft!

    
Branden Barber 31.01.2014 20:29
quelle
1

Die Eigenschaft x des Typs X in der Klasse Y kann kein Array von X sein, wenn Sie explizit angeben, dass sie vom Typ X ist. Wenn Sie sie als Objekt deklarieren, können Sie das umgehen.

Wenn Sie überprüfen möchten, ob es ein Array ist, würde ich ein Backing-Feld verwenden (sagen wir _x) und dann, wo Sie die Eigenschaft verwenden, eine Überprüfung durchführen ( typeof(_x) == X[] )

Das könnte jedoch unordentlich werden, mein bester Rat wäre, den Typ der Eigenschaft x auf X [] zu setzen und in der Menge zu bestimmen, ob der Wert ein Array war (wenn ja, setze _x = value ) oder füge keinen Wert hinzu ein leeres Array von X

    
Daniel Elliott 12.04.2012 06:29
quelle

Tags und Links