2016-07-09 14 views
0

Ich bin derzeit in das Problem, dass ich nicht meine Byte-Array in Klassenobjekt konvertieren kann.Weiterhin weiß ich nicht wirklich, ob meine serialisieren von Klassenobjekt in Byte array.In hinaus, wenn ich versuche, von Byte-Array-Klasse-Objekt zu konvertieren, gab mir Visual Studio diesen Fehler:konvertieren Typ Fehler auf Byte-Array in Klassenobjekt

An unhandled exception of type 'System.InvalidCastException' occurred in ConsoleApplication15.exe 
Additional information: Unable to cast object of type 'System.Collections.Generic.List`1[ConsoleApplication15.Player]' to type 'ConsoleApplication15.Player[]'. 

Hier ist mein Code.

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.Runtime.Serialization.Formatters.Binary; 
using System.Text; 
using System.Threading.Tasks; 

public static class Program 
{ 
    static void Main(string[] args) 
    { 
     String name = Console.ReadLine(); 
     int id = Int32.Parse(Console.ReadLine()); 

     Player Khanh = new Player(name, id); 
     Khanh.testMethod(id); 
     List<Player> ipTest = new List<Player>(); 
     ipTest.Add(Khanh); 
     byte [] BytesList = ToByteList(ipTest); 
     List<Player> PlayerList = ByteArrayToObject(BytesList).ToList(); 

     Console.WriteLine(BytesList[1]); 
     Console.WriteLine(PlayerList[0]); 
     Console.ReadKey(); 

    } 
    public static byte[] ToByteList(List<Player> obj) 
    { 
     if (obj == null) 
      return null; 
     BinaryFormatter bf = new BinaryFormatter(); 
     MemoryStream ms = new MemoryStream(); 
     bf.Serialize(ms, obj); 
     return ms.ToArray(); 
    } 
    public static Player [] ByteArrayToObject(byte[] arrBytes) 
    { 
     MemoryStream memStream = new MemoryStream(); 
     BinaryFormatter binForm = new BinaryFormatter(); 

     memStream.Write(arrBytes, 0, arrBytes.Length); 
     memStream.Seek(0, SeekOrigin.Begin); 

     Player[] obj = (Player[])binForm.Deserialize(memStream); 

     return obj; 
    } 
} 
[Serializable] 
public class Player 
{ 
    String Name; 
    int id; 
    public Player(String Name, int id) 
    { 
     this.id = id; 
     this.Name = Name; 

    } 
    public void testMethod(int n) 
    { 
     n++; 
    } 
    public String getName() 
    { 
     return Name; 
    } 

} 

Vielen Dank für das Lesen.

Antwort

1

Sie verwenden den falschen Rückgabetyp in der Methode ByteArrayToObject. Sie geben eine List<Player> zurück, aber Ihr aktueller Rückgabetyp ist Player[].

Ändern Sie diese Methode:

public static List<Player> ByteArrayToObject(byte[] arrBytes) 
{ 
    MemoryStream memStream = new MemoryStream(); 
    BinaryFormatter binForm = new BinaryFormatter(); 

    memStream.Write(arrBytes, 0, arrBytes.Length); 
    memStream.Seek(0, SeekOrigin.Begin); 

    var obj = (List<Player>)binForm.Deserialize(memStream); 

    return obj; 
}