Announcement

Collapse
No announcement yet.

Serialisieren von Objekten aus fremden DLL's

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

  • Serialisieren von Objekten aus fremden DLL's

    Hallo,

    kann mir vielleicht jemand sagen, ob ich ein Objekt aus einer fremden DLL serialisieren kann. Das Objekt hat weder ein leeren Konstruktor noch das Attribute [Serializeable].


    Ich würde mich sehr freuen wenn mir jemand weiter helfen könnte.

    MfG
    malib

  • #2
    In welcher Programmiersprache (Forum XML-DOM passt wohl nicht)?
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      In C#.
      Habe ein Fehleintrag gemacht. Sollte auch in C# rein.

      Comment


      • #4
        Hallo,

        mit dem XmlSerializer sollte es klappen.

        Ein einfaches Beispiel:

        DLL - Klasse ohne Attribut und Konstruktor -> Standardkonstruktor existiert automatisch. Wird jedoch ein parametrisierter Konstruktor eingefügt wird der Standardkonstruktor überschrieben (dann lässt sich das Objekt nicht deserialisieren).
        Code:
        namespace ClassLibrary1
        {
        	public class Class1
        	{
        		public string Name { get; set; }
        		public int Wert { get; set; }
        	}
        }
        Anwendung:
        Code:
        using System;
        using System.IO;
        using System.Xml.Serialization;
        using ClassLibrary1;
        
        namespace ConsoleApplication1
        {
        	class Program
        	{
        		static void Main(string[] args)
        		{
        			// Instanz des Objekts erzeugen:
        			Class1 mc = new Class1
        			{
        				Name = "Test",
        				Wert = 45
        			};
        
        			// Objekt serialisieren:
        			MemoryStream ms = new MemoryStream();
        			//XmlSerializer xmlSer = new XmlSerializer(mc.GetType());
        			XmlSerializer xmlSer = new XmlSerializer(typeof(Class1));
        			xmlSer.Serialize(ms, mc);
        
        			// Objekt deserialisieren:
        			ms.Position = 0;
        			mc = null;
        			mc = (Class1)xmlSer.Deserialize(ms);
        
        			Console.WriteLine("Name: {0}\tWert: {1}", mc.Name, mc.Wert);
        			Console.ReadKey();
        		}
        	}
        }

        Hoffe es hilft.

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Hallo,

          soweit klappt es auch bei mir.

          Mein Problem ist folgende:

          Ich habe eine Dll zu einer Hardware dessen Objekte ich serialisieren und auch wieder deserialisieren möchte.
          Dies geht leider nicht da diese Objekte weder ein Standartkonstruktor noch das entsprechende Attribut (ich kenne nur [Serializable]) haben.

          Meine Frage ist: Gibt es ein anderen weg zu serialisieren und auch wieder zu deserialisieren?

          Vielen Dank.

          MfG
          malib

          Comment


          • #6
            Ja, händisch.

            Besteht die DLL aus managed Code (.net-Code)?
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Wie händisch?

              Ja die DLL ist ein .Net Code.

              Comment


              • #8
                Indem du selbst Code erstellst der die Objekte serialisiert.
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #9
                  Und wie soll das gehen?

                  Ein Beispiel wär nicht schlecht.

                  Comment


                  • #10
                    Da ich deine DLL nicht kenne kann ich hierzu kein Bsp geben.
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment


                    • #11
                      Vielleicht kannst du mir ja den Ablauf erläutern.
                      Was muss denn gemacht werden?

                      Comment


                      • #12
                        Es gibt unzählige Möglichkeiten wie Objekte serialisiert werden können. Serialisieren bedeutet ja nur dass der Objektzustand gespeichert wird. Sicherlich könnte ich dir hier ein Bsp liefern - dies wird aber aufgrund der vielen Möglichkeiten nicht deine Anforderung treffen.

                        Beginnen wir von vorn:

                        Mit .net kann im binär, SOAP und XML serialisiert werden.
                        Für binär und SOAP ist das [Serializable()]-Attribut notwendig. Dies ist nicht vorhanden.
                        Für XmlSerialization ist dieser Attribut nicht notwendig, jedoch muss ein Standardkonstruktor vorhanden sein. Dieser ist auch nicht vorhanden.
                        Somit kann auf die von .net gebotenen Möglichkeiten nicht zugegriffen werden.

                        Für die Entscheidung wie das selbst gemacht werden kann überlege dir:
                        1. Wie erstellts du die Objekte?
                        2. Wie weist du den Objekten die Werte zu?
                        3. Wie könnte ich die Werte in eine Datei schreiben und in welchem Datei-Format?
                        4. Wie kann ich die Werte wieder aus der Datei lesen?

                        Sind diese Fragen geklärt setzte dies in Code um -> dann hast du deinen Serialisierungs-Algorithmus.

                        mfG Gü
                        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                        Comment


                        • #13
                          Na ja, dann werde ich mal sehen was ich da machen kann.

                          Vielen Dank nochmal.


                          Gruß
                          malib

                          Comment


                          • #14
                            Hm, mir würde sich auch noch folgende Frage stellen:

                            Wie komme ich an die private Felder heran?
                            Wenn ich nicht alle Felder des Objekts speichern kann, dann lässt sich nie der Zustand des Objekts korrekt speichern, oder gar wiederherstellen...
                            Just be DRY and KISS your customers.

                            Comment


                            • #15
                              Hi,

                              der Zustand eines Objektes ist durch seine Eigenschaften exakt definiert. Durch Serialisierung/Deserialisierung kann dann sehr wohl der Zustand wieder hergestellt werden.

                              Private Variablen sagen nichts über einen Zustand aus. Diese werden entweder durch die Eigenschaften gesetzt oder bei der Initialisierung (automatisch oder durch Konstruktor).

                              mfG Gü
                              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                              Comment

                              Working...
                              X