• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyjątek podczas deserializacji obiektu

0 głosów
78 wizyt
pytanie zadane 27 lutego 2021 w C# przez michal100032 Początkujący (390 p.)
edycja 28 lutego 2021 przez michal100032

Witam, próbuję przesłać obiekt pomiędzy dwoma komputerami. zamieniam obiekt na byte[] przy pomocy BinaryFormattera:
 

public static byte[] ToBytes(object obj) {
	using (MemoryStream ms = new MemoryStream()) {
		BinaryFormatter formatter = new BinaryFormatter();
		formatter.Serialize(ms, obj);
		return ms.ToArray();
	}
}

A na drugiej maszynie deserializuję:

public static object ToObject(byte[] bytes) {
	using (MemoryStream ms = new MemoryStream()) {
		BinaryFormatter formatter = new BinaryFormatter();
		ms.Write(bytes, 0, bytes.Length);
		ms.Seek(0, SeekOrigin.Begin);
		return formatter.Deserialize(ms);
	}
}

Ale niestety otrzymuję wyjątek:

System.Runtime.Serialization.SerializationException: Unable to find assembly 'Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
   at System.Runtime.Serialization.Formatters.Binary.BinaryAssemblyInfo.GetAssembly()
   at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetType(BinaryAssemblyInfo assemblyInfo, String name)
   at System.Runtime.Serialization.Formatters.Binary.ObjectMap..ctor(String objectName, String[] memberNames, BinaryTypeEnum[] binaryTypeEnumA, Object[] typeInformationA, Int32[] memberAssemIds, ObjectReader objectReader, Int32 objectId, BinaryAssemblyInfo assemblyInfo, SizedArray assemIdToAssemblyTable)
   at System.Runtime.Serialization.Formatters.Binary.BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped record)
   at System.Runtime.Serialization.Formatters.Binary.BinaryParser.ReadObjectWithMapTyped(BinaryHeaderEnum binaryHeaderEnum)
   at System.Runtime.Serialization.Formatters.Binary.BinaryParser.Run()
   at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(BinaryParser serParser, Boolean fCheck)
   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, Boolean check)
   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream)

Pracuję w Visual Studio 2019.

Bardzo dziękuję za wszystkie odpowiedzi,
pozdrawiam

EDIT: Dla wszystkich którzy też tego próbują: BinaryFormatter się do tego nie nadaje
Stack Overflow - Deserialization exception: Unable to find assembly
 

1 odpowiedź

+1 głos
odpowiedź 27 lutego 2021 przez Wiciorny Mędrzec (199,040 p.)

Być może niezgodność bibliotek?  W pierwszej lini masz dokładną informacje 
 

System.Runtime.Serialization.SerializationException: Unable to find assembly 'Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.

W twoim projekcie nie może Visual Studio odnaleźc wskazanej  paczki/biblioteki do wykonania operacji. Nie wiem jak wygląda proces class-path dla C# ale jesteś pewien że  PAKIET z funkcjami jest dołączony ? 

1
komentarz 28 lutego 2021 przez michal100032 Początkujący (390 p.)

Wielkie dzięki Wiciorny, rzeczywiście okazało się że czegoś brakuje, ale nie był to pakiet z funkcjami tylko klasa. BinaryFormatter nie był wstanie zdeserializować tego obiektu pochodzącego z innego komputera, mimo że taka sama klasa znajduje się w tym samym projekcie. Wydaje mi się że nie ma sposobu aby to zrobić przy użyciu BinaryFormattera.

Stack Overflow - Deserialization exception: Unable to find assembly

Podobne pytania

+1 głos
1 odpowiedź 109 wizyt
pytanie zadane 5 sierpnia 2019 w C i C++ przez luna22 Obywatel (1,420 p.)
0 głosów
1 odpowiedź 661 wizyt
pytanie zadane 31 marca 2017 w C# przez webster Obywatel (1,060 p.)

86,541 zapytań

135,291 odpowiedzi

300,649 komentarzy

57,288 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...