Announcement

Collapse
No announcement yet.

Vb.Net: Eigenschaften unbekannter Objektvariablen auslesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Vb.Net: Eigenschaften unbekannter Objektvariablen auslesen

    Hallo!

    Folgende Situation: Die Eigenschaften eines unbekannten Objektes sollen ausgelesen werden. Mittels Reflection bin ich hier schon einen großen Schritt weiter gekommen.

    Allerdings ergibt sich ein für mich zur Zeit unlösbares Problem, wenn eine Eigenschaft als Typ eine Liste ist, und mehrere Unterelemente enthält.

    z.B. Teilnehmer
    --> teilnehmer1
    --> teilnehmer2

    Auf diese untere Ebene (teilnehmer1, teilnehmer2) bin ich bis dato noch nicht vorgekommen. Mit welchen Mitteln ist dies zu realisieren? Der Programmquelltext soll völlig unabhängig vom bestehenden Objekt realisiert werden, soll eine Art O/R-Mapper werden.

    For Each eigenschaft In meeting.GetType.GetProperties.ToList
    If eigenschaft.PropertyType.ToString = "System.String" Or eigenschaft.PropertyType.ToString = "System.Int32" Then
    Try
    eigenschaft.SetValue(meeting, eigenschaft.GetValue(meeting, Nothing), Nothing)
    Catch ex As Exception
    valid = False : Exit Sub
    End Try
    ElseIf eigenschaft.PropertyType.ToString.Contains("List") Then
    'For Each info In eigenschaft.GetType.GetMethods.ToList
    ' ListBox1.Items.Add(info.Name.ToString)
    'Next
    'ListBox1.Sorted = True
    'For Each info In eigenschaft.GetGetMethod.GetParameters.ToList
    ' MessageBox.Show(info.Name.ToString)
    'Next
    'Dim test As Object = eigenschaft.GetValue("EFN", New Object() {0})

    'Dim mi As MethodInfo = eigenschaft.GetType.GetMethod("GetObjectData")
    'Dim test As Object = mi.Invoke(eigenschaft, New Object() {})

    End If
    Next


    Das bestehende Objekt ist Instanz einer Klasse, die automatisch mittels linq to xsd erzeugt wird.

    Ich hoffe, hier kann mir einer weiterhelfen.

    Mit freundlichen Grüßen

    Andrè Döking

  • #2
    das geht in vb leider nicht!!

    Comment


    • #3
      Hallo!

      Nach meinen langen Internetrecherchen bin ich mittlerweile auch nicht mehr so überzeugt, dass so etwas realisierbar ist, wenigstens nicht in VB.net.

      Gibt es denn andere Programmiersprachen, wo so etwas möglich ist, z.B. C# oder so?

      Mit freundlichen Grüßen

      Andrè Döking

      Comment


      • #4
        Originally posted by wolfsgrube View Post
        das geht in vb leider nicht!!
        Was wolfsgrube heute alles behauptet hat, geht sehr in Richtung Frechheit und Schwachsinn; deshalb darf man auch das hier nicht glauben.

        @André
        Ob VB.NET oder C# ist sowieso egal, weil beide Sprachen auf die Klassenbibliothek des NET Framework zugreifen. Entweder es geht über Reflection, wie Du es versucht hast, oder es geht nicht. So sehr bin ich dabei noch nicht in die Tiefe der Klassen vorgedrungen, dass ich eine endgültige Aussage wage; aber grundsätzlich müsste es möglich sein. Jürgen

        Comment


        • #5
          Hallo!

          Problem generell ist ja nicht das Ansprechen (Auslesen & Setzen) von Eigenschaften, die auf einer Ebene liegen,

          z.B. Meeting --> e-Mail
          --> VNR
          --> usw.

          sondern erst, wenn eine Eigenschaft der höchsten Ebene ein Listentyp mit untergeordneten Objekten ist.

          Meeting --> teilnehmer --> teilnehmer1
          --> teilnehmer2

          Also wer hier noch eine Idee zu hat, wie die Listentypen mit Reflection zu verwalten sind, bitte melden.

          Mit freundlichen Grüßen

          Andrè Döking

          Comment


          • #6
            Eine erste Idee wäre eine Überprüfung, ob eine Element vom Type IEnumerable ist. Wenn dies der Fall ist, handelt es ich um eine Liste und man kann die Elemente der Liste anschauen. Probleme könnte es geben, wenn keine Elemente in der Liste vorhanden sind. Dann ist es schwer die Metadaten auszulesen. Möglich ist aber bestimmt auch dies.
            Gruss

            Mirko

            Mappen statt hacken mit dem .NET O/R Mapper Invist

            Comment

            Working...
            X