myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Wie eine List aus Objekten erstellen ?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie eine List aus Objekten erstellen ?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Glowhollow Glowhollow ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.07.2018
Beiträge: 74


Glowhollow ist offline

Wie eine List aus Objekten erstellen ?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ich bastel ja noch ein bischen, an dem JSON-Parser rum, und habe auch in dieser Struktur sowohl Arrays als auch eine vielzahl von Objekten, welche im Array im JSON-String sortiert sind.

Nun möchte ich, um es effektiv ansprechen zu können, dieses Array aus Objekten in eine List überführen.

Ist das auch der richtige Weg, gibt es bessere Optionen ?

Wenn es eine List ist, wie greife ich dann z.bsp. auf Properties z.bsp. aus dem Array[1] des Objekts zu ?

Kann mir hier jemand nen kurzen Überblick geben, was das effektivste ist ?

Edit: Ihr braucht mir jetzt keine Codebeispiele posten, ein grober Überblick genügt

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Glowhollow am 09.10.2018 12:32.

09.10.2018 12:27 Beiträge des Benutzers | zu Buddylist hinzufügen
pinki
myCSharp.de-Mitglied

avatar-4072.jpg


Dabei seit: 24.08.2008
Beiträge: 683
Herkunft: OWL


pinki ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Eine Liste kannst du über die  ToList-Methode aus Linq erzeugen.

Auch auf die Objekte in einer Liste kannst du mit einem  Index zugreifen.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von pinki am 09.10.2018 12:39.

09.10.2018 12:37 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.597
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ohne den JSON Parser und den passenden Kontext, würde ich auch Arrays von JSON direkt als typisierte Liste<T> umwandeln.
Diese lassen sich dann auch, da diese intern auch ein Array als Container verwenden, wir ein Array über den Index nutzen.

Mich würde aber interessieren, wozu du dir einen eigenen JSON Parser baust, wenn es schon einige gute fertige Lösungen gibt.
Ist dies nur ein Test-/Lernprojekt oder wilst du es später auch produktiv einsetzen?

Falls du es produktiv nutzen willst, nimm lieber direkt Newtonsofts JSON Lib für C#
Dort werden JSON Arrays ebenfalls als List<T> deserialisiert.

T-Virus
09.10.2018 13:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.456
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

09.10.2018 13:08 Beiträge des Benutzers | zu Buddylist hinzufügen
Glowhollow Glowhollow ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.07.2018
Beiträge: 74

Themenstarter Thema begonnen von Glowhollow

Glowhollow ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo T-Virus,

um deine Frage zu beantworten. Ja ich würde sehr gern den NewtonSoft Parser verwenden. Leider ist dieser mit unserem verwendeten Programm inkompatibel und der JavaScriptSerializer der von C# von haus angeboten wird, kommt mit einer bestimmten Konstellation an Input nicht klar.

Von daher muß ichs selbst bauen (bin da aber schon sehr weit fortgeschritten), muß nur noch die Objekte in eine List überführen, dann steht das schon mal.
09.10.2018 14:09 Beiträge des Benutzers | zu Buddylist hinzufügen
FZelle
myCSharp.de-Poweruser/ Experte

Dabei seit: 23.04.2004
Beiträge: 9.851


FZelle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Und eine der tausenden anderen JSON Libs ( z.b. PowerJSON ) geht auch nicht?

Kann mir das echt nicht vorstellen
09.10.2018 14:31 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.193
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wenn Du das selbst bauen musst, dann stimmt was bei euch nicht.
Ich bezweifle bei weitem, dass ihr soooo besonders seid, dass das nicht schon lange in den wichtigsten Parsern bedacht ist.

Meine Vermutung: ihr habt irgendwas probiert, ohne euch den Parser wirklich anzuschauen.

Meine Vermutung ist simpel:
JavaScript arbeitet mit CamelCase, .NET Serialisierung bei Json i.d.R. mit PascalCase.

Ihr seid vermutlich die aller ersten, die irgendein Serialisierungsproblem haben, das sich nicht durch die SerializerOptions lösen lässt.
09.10.2018 14:50 Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.456
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Also ich glaube ja auch, daß es eigentlich keine Anwendungsfall gibt, bei dem man einen eigenen JSON-Parser implementieren muß. Vor allem, wenn der Entwickler noch Probleme beim Umgang mit Arrays und Listen hat, dann sollte man davon unbedingt absehen.

Um über alternative Lösungen nachzudenken, sollte aber erstmal erklärt werden, was genau das bedeutet:

Zitat von Glowhollow:
mit unserem verwendeten Programm inkompatibel

Zitat von Glowhollow:
kommt mit einer bestimmten Konstellation an Input nicht klar
09.10.2018 14:58 Beiträge des Benutzers | zu Buddylist hinzufügen
Glowhollow Glowhollow ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.07.2018
Beiträge: 74

Themenstarter Thema begonnen von Glowhollow

Glowhollow ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Auf die Anklagebank mit ihm ! ;)

Um die Frage zu klären.

Wir haben eine eigene Automatisierungssoftware (flowster), mit der man sich Arbeitsabläufe zusammenstöpseln kann. Je nach Anwendungsfall, gibts dafür spezielle aktivitäten. Die sind C# geschrieben und werden über eine Bibliothek nachgeladen.

Warum auch immer unser rumänisches Entwicklerteam es nicht geschafft hat, den Newtonsoft Json Parser funktionabel in dieses Programm einzubauen, entzieht sich leider meiner Kenntnis.

Fakt ist aber, ich habe hier eine REST-Api, welche ich auslesen muß und für den weiteren Gebrauch aufarbeiten muß.

Da der JavaScriptSerializer z.Bsp. nicht eigenständig auflösen kann, weil der Parser damit ein Problem hat, wenn in einem Array, 2 Properties in einem Array unerwartete Ergebnisse liefert, in unserem Fall einen Leerstring (also statt: "sys_domain":{"link":"https://dev63125.service-now.com/api/now/table/sys_user_group/global","value":"global"} nur "sys_domain":"") und dies auch nicht durch bearbeitung der für diesen speziellen Fall, sys_domain, und deren getter und setter nicht zum erfolg führt, ist es nun mal so, das ich das manuell machen muß.

Mir ist klar und durchaus bewußt, das das unsere Software können sollte. Da ich aber, da nichts zu sagen habe, sondern nur einer von 3 Entwicklern bin (die Rumänen müßten so an die 20+ sein) - lassen die sich da nicht reinreden. Irgend ein assembly problem, hab ich am rande mitbekommen, aber insofern nicht mein problem.

Zudem war ich 4 Wochen nicht da, also ich bastel nicht seit 4 wochen rum, sondern hab das ganze 4 Wochen ruhen lassen.

@Abt Magst du mir das bei der .NET Serialisierung bei JSON, mich etwas erleuchten ?

Ich habe noch für Abschnitte des einfachen "JSON" String, den JavaScript deserializer. Der funktioniert hier auch soweit ganz gut. Oben besagtes Problem, macht es aber nicht einfacher, und so muß ich die die Parts, welche nicht gefressen werden, über eigene Funktionen miteinbauen.

Soweit kein Problem.

P.S. Unser Chefentwickler, hat sich schon tierisch mit dem rumänischen Entwicklerteam gestritten, da wir aber intern, zwar uns in diese Software eingekauft haben, sind uns jedoch die Hände gebunden, was die generelle Entwicklung anbetrifft (btw. Flowster ist noch nicht final).
09.10.2018 15:23 Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.456
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Für das Verständnis des Problems spielt es keine Rolle, wo die Entwickler herkommen, oder ob du 4 Wochen lang nicht da warst. Eure firmeninternen Probleme gehören auch nicht hier ins Forum.

Was eigentlich interessiert, ist, aus welchen Anforderungen oder Gegebenheiten eine eigene Implementierung des JSON-Parsers notwendig sein sollte bzw. warum der NewtonSoft-Parser nicht ausreicht. Das geht aus deiner Erklärung aber nicht so richtig hervor.
09.10.2018 15:40 Beiträge des Benutzers | zu Buddylist hinzufügen
pinki
myCSharp.de-Mitglied

avatar-4072.jpg


Dabei seit: 24.08.2008
Beiträge: 683
Herkunft: OWL


pinki ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich habe das so verstanden, dass als Eigenschaftswert ab und zu mal statt eines Objekts ein Leerstring drin stehen kann und dadurch der komplette Typ falsch ist.
09.10.2018 15:44 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Glowhollow Glowhollow ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.07.2018
Beiträge: 74

Themenstarter Thema begonnen von Glowhollow

Glowhollow ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

nochmal. Ich würde den JSON-Parser von newton soft wirklich wirklich gerne nutzen (nutze diesen auch privat). Werde jedoch nicht meine Kompetenzen überschreiten und die Arbeit niederlegen, weil die Implementation mit unserer Software nicht funktioniert.

Mehr muss ich hoffentlich nicht mehr dazu sagen, ok ?

@Pinki, genau das ist es. Der JavaScript-Deserializer, ist ja funktionsfähig, für alle anderen JSON-Values kann ich den ja auch nutzen. Und wiegesagt, es ist nicht so, das ich nicht versucht habe, das Problem über die getter und setter abzufangen. Wenn ich das mache, bekomme ich ne Fehlermeldung vom Deserializer, das irgendwas mit dem Index nicht stimmt. Ich habe diesen nicht programmiert und daher leider keine Ahnung, wo es da hakt. Ist auch schlecht an den Quellcode ranzukommen.

Daher habe ich im Netz einen kleinen, Parser gefunden, den ich auch schon miteingebaut habe.

---------------------------------------------------------------------------------------------------------------------

Ich werde später in dem Thread, nochmal auf die ToList geschichte eingehen, falls mir da was unklar ist. Melde mich später
09.10.2018 15:49 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.193
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von pinki:
Ich habe das so verstanden, dass als Eigenschaftswert ab und zu mal statt eines Objekts ein Leerstring drin stehen kann und dadurch der komplette Typ falsch ist.

Das nennt sich Dynamic Json.

NewtonSoft hat dafür das JToken Objekt, an dem man erkennen kann, ob es sich um ein JObject oder ein JArray handelt.
Anschließend kann man entsprechend damit arbeiten und zB. durch einen Converter auch ein einzelnes Objekt in eine Liste parsen/deserialisieren.

Die einfache De/Serialisierung durch JsonConvert kann das nicht abdecken, weil es in C# keine dynamischen Klassen gibt.
Das sollte soweit durch die Grundlagen von C# bekannt sein ;-)

Wir reden also - wie bereits vermutet - von einem üblichen Json Feature, das so ziemlich jeder Parser eingebaut hat.

Zitat von Glowhollow:
Ist auch schlecht an den Quellcode ranzukommen.

NewtonSoft ist Open Source auf GitHub. Für die Problemfindung hier aber irrelevant; wir sprechen ja einfach nur von Dynamic Json.

Zitat von Glowhollow:
Werde jedoch nicht meine Kompetenzen überschreiten und die Arbeit niederlegen, weil die Implementation mit unserer Software nicht funktioniert.

Sehe keinen Grund, dass sie nicht funktionieren soll.
Wenn Du Dich mit Json und NewtonSoft etwas tiefer beschäftigt hättest, was als Entwickler zu Deinen Aufgaben gehört, wäre Dir das mit dem Dynamic Json über den Weg gelaufen.

So hast Du nun aber Zeit verschwendet, um einen eigenen Json Parser zu schreiben.
Soviel zum Thema Kompetenzentscheidung.

Zitat von Glowhollow:
Werde jedoch nicht meine Kompetenzen überschreiten und die Arbeit niederlegen, weil die Implementation mit unserer Software nicht funktioniert.

Das ist das Problem wenn man die Fragestellung nicht genau formuliert.
Der Titel des Themas ist "Wie eine List aus Objekten erstellen ?"

Ich konnte ohne den Hinweis von pinki nicht erkennen, dass wir hier von einem Dynamic Json sprechen.
Daher ist Dein Einwand "Auf die Anklagebank" durchaus korrekt: bei einer ordentlichen Formulierung, worum es eigentlich geht, wäre die Irritation gar nicht entstanden.

Ansonsten sehe ich das wie MrSparkle: eure internen Firmenprobleme haben mit der Lösungsfindung nichts am Hut.
09.10.2018 15:57 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 25.09.2020 02:22