2016-07-09 10 views
0

私は現在、バイト配列をクラスオブジェクトに変換できないという問題にぶつかっています。さらに、クラスオブジェクトからバイトへのシリアル化また、バイト配列からクラスオブジェクトに変換しようとすると、Visual Studioによって次のエラーが表示されます。バイト配列の型エラーをクラスオブジェクトに変換する

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[]'. 

ここは私のコードです。

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; 
    } 

} 

ありがとうございます。

答えて

1

ByteArrayToObjectメソッドで間違った戻り値の型を使用しています。 List<Player>を返しますが、現在の返品タイプはPlayer[]です。

変更するには、この方法:

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; 
} 
関連する問題