none
XML Attribut setzen RRS feed

  • Frage

  • Hallo!

    Ich habe eine durch die XSD.exe autom. erstellte Klasse daten mit der Eigenschaft Item vom Typ Objekt:

    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
    public partial class daten {
            
        private object itemField;
            
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("anhanginhalt", typeof(byte[]), DataType="base64Binary")]
        [System.Xml.Serialization.XmlElementAttribute("pfad", typeof(string))]
        public object Item {
            get {
                return this.itemField;
            }
            set {
                this.itemField = value;
            }
        }
    }

    Die Eigenschaft Item hat für die Serialisierung zwei Attribute pfad und anhanginhalt.

    Mein Problem ist nun die Zuordnung von Werten zu diesen Attributen. Wie spreche ich das Attribut an???

    daten datenAussenansicht = new daten();
    datenAussenansicht.Item = new object "pfad" ???
    

    Freitag, 19. Januar 2018 08:47

Antworten

  • Hi,
    mit dem XmlElement-Attribut legst Du nur fest, welche Typen Deiner Eigenschaft Item der Serializer bzw. der Deserializer verarbeiten kann/darf.

    Warum Du auf eines der Attribute zugreifen willst, ist unklar. Zugreifen auf die Attribute, die als Metadaten in der Assembly enthalten sind, in der sich die Klassendeklaration befindet, kannst Du mittels Reflection. Das kann beispielsweise erforderlich sein, wenn Du im Programm eine Information benötigst, ob bestimmte Attribute mit bestimmten Parametern zu einer Klasse oder einem Member einer Klasse vorhanden sind.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert perlfred Freitag, 19. Januar 2018 09:20
    Freitag, 19. Januar 2018 08:58

Alle Antworten

  • Hi,
    mit dem XmlElement-Attribut legst Du nur fest, welche Typen Deiner Eigenschaft Item der Serializer bzw. der Deserializer verarbeiten kann/darf.

    Warum Du auf eines der Attribute zugreifen willst, ist unklar. Zugreifen auf die Attribute, die als Metadaten in der Assembly enthalten sind, in der sich die Klassendeklaration befindet, kannst Du mittels Reflection. Das kann beispielsweise erforderlich sein, wenn Du im Programm eine Information benötigst, ob bestimmte Attribute mit bestimmten Parametern zu einer Klasse oder einem Member einer Klasse vorhanden sind.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert perlfred Freitag, 19. Januar 2018 09:20
    Freitag, 19. Januar 2018 08:58
  • Hallo Peter!

    Vielleicht ist zugreifen dann der falsche Begriff?! Ich möchte für eine nachfolgende Serialisierung dieser Klasse (Erstellung einer XML-Datei) den XML-Attributen Werte zuordnen, damit ein XML wie folgender z.B. erstellt wird:

    <Daten>
       <pfad>abc.jpg</pfad>
    </Daten>  

    Nur zur Vorgehensweise:

    Die XSD.exe hat aus dem XML-Chema diese Klasse (unter anderen) erstellt. Ich instanziere und fülle nun diese Klasse(n) (Eigenschaften) mit eigenen Werten um diese wieder zu serialisieren (XML-Datei zu erstellen).

    Freitag, 19. Januar 2018 09:15
  • Hallo Peter!

    Ich hatte eine "Blockade". Jeder String (oder angegebene Attribute-Typ) wird richtig serialisiert :-)

    daten datenAussenansicht = new daten();
    string String = "abc.jpg";
    datenAussenansicht.Item = String; 

    Vielen Dank für deinen Hinweis!



    • Bearbeitet perlfred Freitag, 19. Januar 2018 09:46
    Freitag, 19. Januar 2018 09:29
  • Hi,
    die Variable mit der Zeichenkette muss nicht den Namen "pfad" haben. Der Serializer erkennt, dass eine Zeichenkette zu serialisieren ist und den Knotennamen nimmt er aus dem Attribut, welches dem string zugeordnet ist.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Freitag, 19. Januar 2018 09:42
  • Hallo Peter!

    Ja, das hatte ich dann auch gemerkt und meine Antwort abgeändert. Mit deiner Erklärung ist es aber sehr viel logischer begründet!

    Nochmals vielen Dank!

    Fred.

    Freitag, 19. Januar 2018 10:02