Typ bzw. inhalt von "object" serialisieren?



  • Ich hab eine Message klasse welche ich via remoting übers netz schicken will, sie ist [Serializable()] 😉 im konstruktor will ich nun irgend ein Objekt übegeben. Wie bekomm ich es hin das der übergeben typ serialisiert wird, und später deserialiseirt werid?

    Würde ich als Member nur "object" reinhauen würde mir ja nur die referenz rübergeschickt werden, aber nich das object oder?

    class Message{
    ...
      public Message(object dat){
      ...
      }
      public object Get(){
        return ...;
      }
    }
    


  • Würde ich als Member nur "object" reinhauen würde mir ja nur die referenz rübergeschickt werden, aber nich das object oder?

    Nein. Es wird der ganze Object Graph serialisiert.
    Siehe Doku zu BinaryFormatter oder SoapFormatter.

    Alle Objekte im Graph müssen [Serializable] sein.

    Simon

    Edit: Hängt natürlich vom verwendeten Formatter (Serializer) ab. Ist aber so bei den erwähnten.



  • Bin verwirt, es kommt aber dieser fehler: wenn ich ein string verschicken will.
    {"Object reference not set to an instance of an object."}

    [Serializable()]
        public class Message
        {
    
            object m_Value;
    
            public Message(object o)
            {
    
                m_Value = o;
             }
            public object Get(){
                 return m_Value;
            }
    }
    

    Server : new Message("BALBAL");

    client: Message var= foo.Get();

    dann fehler



  • Hört sich eher so an, als ob foo == null ist, und nicht als ob foo.Get() null zurückliefert...



  • ne foo ist nich null.... wenn ich statt "object" ein "string" in der klasse verwende dann gehts.



  • Folgendes geht bei mir... was ist der Unterschied zu deinem Code?

    using System;
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;
    
    namespace Formatter
    {
    	[Serializable]
    	class Message
    	{
    		private object obj;
    
    		public Message(object obj)
    		{
    			this.obj = obj;
    		}
    
    		public object Obj
    		{
    			get { return obj; }
    		}
    	}
    
    	class Program
    	{
    		static void Main(string[] args)
    		{
    			Message msg1 = new Message("test");
    
    			BinaryFormatter bf1 = new BinaryFormatter();
    			MemoryStream ms1 = new MemoryStream();
    			bf1.Serialize(ms1, msg1);
    
    			byte[] buffer = ms1.ToArray();
    
    			MemoryStream ms2 = new MemoryStream(buffer);
    			BinaryFormatter bf2 = new BinaryFormatter();
    			Message msg2 = (Message) bf2.Deserialize(ms2);
    			string s = (string)msg2.Obj;
    		}
    	}
    }
    


  • naja ich schick es übers netz... via remoting.



  • Zeige mal den Code.
    Simon



  • BlödeFrage schrieb:

    naja ich schick es übers netz... via remoting.

    ok, basierend auf der Menge Informationen die Du gibst kann ich nur sagen: Du machst was falsch.



  • Sorry.

    bin hab den code grad nich da. ich poste morgen mal bischen mehr code. grüße


Anmelden zum Antworten