Laden...

Fehler bei deserialize

Erstellt von alf468 vor 18 Jahren Letzter Beitrag vor 18 Jahren 3.335 Views
A
alf468 Themenstarter:in
196 Beiträge seit 2005
vor 18 Jahren
Fehler bei deserialize

Ich möchte gerne ein Object per NetworkStream verschicken,dazu verwende ich die Klasse BinaryFormatter.

public class Codierung
	{
		private static BinaryFormatter serializer = new BinaryFormatter();
		public Codierung()
		{
			//
			// TODO: Fügen Sie hier die Konstruktorlogik hinzu
			//
		}
		public static object decodieren(NetworkStream ns)
		{
			return (object)serializer.Deserialize(ns);
		}
		public static NetworkStream encodieren(NetworkStream ns,object ob)
		{
			serializer.Serialize(ns,ob);
			return ns;
		}
	}

Wenn ich beim Client nun das Object sende kommt beim Server folgender Fehler:
"Die Assembly ClientProjekt ,Version xyz,Culture=neutral,PublicKeyToken=null kann nicht gefunden werden,
Die Serverklasse und die Clientklasse befinden sich in 2 verschiedenen Projekten.

Mfg alf468

4.221 Beiträge seit 2005
vor 18 Jahren

Original von alf468
Die Serverklasse und die Clientklasse befinden sich in 2 verschiedenen Projekten.

Mfg alf468

...und haben vermutlich nicht dieselbe Version

--> beide brauchen dieselbe Version... oder Du seriralisierst das ganze als XML

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

A
alf468 Themenstarter:in
196 Beiträge seit 2005
vor 18 Jahren

Dann verwende ich die Klasse XmlSerializer. Nur leider kommt da schon ein Fehler beim Senden.

Unbehandelte Ausnahme: System.InvalidOperationException: Beim Generieren des XML-Dokuments ist ein Fehler aufgetreten. ---> System.InvalidCastException: Die angegebene Umwandlung ist ungültig.
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write3_Codierung(Object o)
--- Ende der internen Ausnahmestapelüberwachung ---

public class Codierung
	{
		private static XmlSerializer serializer = new XmlSerializer(typeof(Codierung));
		public Codierung()
		{
			//
			// TODO: Fügen Sie hier die Konstruktorlogik hinzu
			//
		}
		public static object decodieren(NetworkStream ns)
		{
			return (object)serializer.Deserialize(ns);
		}
		public static NetworkStream encodieren(NetworkStream ns,object ob)
		{
			serializer.Serialize(ns,ob);
			return ns;
		}
	}
A
alf468 Themenstarter:in
196 Beiträge seit 2005
vor 18 Jahren

OK dummer Fehler 😁
Der Type muss natürlich die Object Klasse sein. Das Senden geht nun nur kommt beim Server eine Fehlermeldung: "Fehler in XML Dokument (0,0).
Was ist nun wieder Falsch?

A
alf468 Themenstarter:in
196 Beiträge seit 2005
vor 18 Jahren

Problem gelöst 😁

byte[] bytes=new byte[client.ReceiveBufferSize];
int intBytes=ns.Read(bytes,0,client.ReceiveBufferSize);
								MemoryStream MStream = new MemoryStream();
								MStream.Write(bytes, 0, intBytes);
								MStream.Seek(0,SeekOrigin.Begin);
								XmlSerializer serializer = new XmlSerializer(typeof(SendObject));


Hier gab es schon mal so ein Problem XmlSerializer.Deserialize
Hatte das aber vorher nie gefunden.