c # Abfragepfad für Firebase-Daten über FirebaseDatabase.net

8

Ich habe Probleme herauszufinden, wie man nach Daten von Dritten fragt. So ist es strukturiert:

  

/ bucketa / bucketb / bucketc / someguidtypekey / anotherguidtypekey / (Felder I   möchte hier abbilden)

Ich habe es versucht:

%Vor%

Wo WrapperClass ein Schlüssel / Objekt-Kombinationsfeld ist, dann ist das THAT-Objekt ein anderes Schlüssel / Objekt-Kombinationsfeld, und dann ist dieses Objekt die tatsächliche Klasse.

%Vor%

Ich habe es auch versucht:

%Vor%

Aber das hat nur eine Zeichenfolge vom Objekttyp zurückgegeben.

Kann mir hier jemand helfen?

Dies ist in C# , mit FirebaseDatabase.net

Bearbeiten:

Alles klar, jetzt kommen wir näher. Implementierung von @ElmarJensen-Korrektur (aus einem seiner Kommentare):

%Vor%

Ich bekomme jetzt den Fehler:

  

Fehler beim Konvertieren von Wert True to type   'RealClass'

Im Fehler wird angegeben, dass versucht wird, RealClass.property1 zu konvertieren, wobei property1 vom Typ bool ist.

Warum versucht es, den property1 in meinen RealClass Objekttyp anstelle des Elternobjekts zu konvertieren? Die Struktur macht für mich Sinn. Und in der Ausnahme, die "responseData" -Eigenschaft hat alle Datensätze, die ich im richtigen JSON-Format erwartet, also nicht sicher, was hier vorgeht.

Bearbeiten 2: Hier ist das eigentliche Datenformat:

%Vor%     
ganders 06.07.2017, 05:50
quelle

1 Antwort

2

Wildcards ("bucketa / bucket / bucketc / * / *") existieren in Firebase nicht. Wenn Sie also keinen Einfluss auf die Datenstruktur haben, müssen Sie den gesamten Datenbaum sofort vom Stamm herunterladen bei "bucketa / bucket / bucketc". Das Problem ist, dass für fireBase-Datenbank-Dotnet, die "Kinder" dieser Struktur (SomeguidTypeKey / AnotherGuidTypeKey) als Eigenschaften des Objekts mit dem GUIDKey als der Name der Eigenschaft angezeigt werden - was bedeutet, dass Sie die Guidkeys zum Zeitpunkt der Kompilierung kennen müssen damit dies funktioniert. Da die Methode jedoch JSON.net im Hintergrund verwendet und diese Bibliothek die Deserialisierung in Dictionaries anstelle von Objekten unterstützt, kann Folgendes tatsächlich funktionieren:

%Vor%

Auch wenn es nur eine Abfrage ist, wäre es ziemlich einfach, dies "manuell" mit einem HttpClient zu tun, oder FireSharp (eine andere FB .net-Bibliothek, Ссылка ), die Dir einen einfachen direkten Zugriff auf das" rohe "zurückgegebene JSON ermöglicht, so:

%Vor%

Danach können Sie die Eigenschaften des zurückgegebenen JSON-Objekts einfach iterieren (zB Iterieren über JSON-Objekt in C # ).

Wenn Sie direkte Kontrolle über die Datenstruktur haben, wäre es natürlich ratsam, sie weiter zu reduzieren (siehe Ссылка ).

Ich bin nicht ganz sicher, was Sie mit "Aber das ist nur eine Zeichenfolge des Objekttyps zurückgegeben." .OnceAsync<RealClass>(); gibt eine Auflistung von Objekten vom Typ FirebaseObject zurück (das ursprüngliche Objekt wird als seine Object-Eigenschaft verfügbar gemacht) - niemals ein String.

Auf die Aktualisierung antworten

Es hört sich so an, als würde Ihre Anfrage eine Ebene tiefer gehen, als ich von Ihrer Datenbeschreibung angenommen habe. Würde das funktionieren?

%Vor%     
Elmar Jansen 17.07.2017, 08:32
quelle