2017-06-18 72 views
0

這是錯誤即時得到..指定的轉換無效C#控制檯應用程序

http://i.imgur.com/VWTa4Mf.png

這裏是我的代碼..

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

namespace LoginServer 
{ 
[Serializable] 
class MessageData 
{ 
    public int type = 0; 
    public string stringData = ""; 

    public static MessageData FromByteArray(byte[] input) 
    { 
     MemoryStream stream = new MemoryStream(input); 
     BinaryFormatter formatter = new BinaryFormatter(); 
     MessageData data = new MessageData(); 
     data.type = (int)formatter.Deserialize(stream); 
     data.stringData = (string)formatter.Deserialize(stream); 

     if (data.stringData == "") 
     { 
      data.type = 999; 
      data.stringData = "No command included"; 
     } 

     return data; 
    } 

    public static byte[] ToByteArray(MessageData msg) 
    { 
     MemoryStream stream = new MemoryStream(); 
     BinaryFormatter formatter = new BinaryFormatter(); 

     formatter.Serialize(stream, msg.type); 
     formatter.Serialize(stream, msg.stringData); 

     return stream.ToArray(); 
     } 
    } 
} 

真的不知道爲什麼我不能用這個投作爲一個int ..

我花了很多時間試圖解決這個問題,即使使用一個const int但沒有解決問題。

集類型爲int和數據是MessageData,所以INT應該做工精細....

請幫助。因爲你要反序列化應該是MessageData類型的對象

data = (MessageData)formatter.Deserialize(stream); 

:用下面的

data.type = (int)formatter.Deserialize(stream); 
data.stringData = (string)formatter.Deserialize(stream); 

+2

請將錯誤作爲*文本*置於您的問題中並提供[mcve]。 –

回答

2

此時應更換都投你怎麼做。此外,您也紛紛改變了以下內容:

formatter.Serialize(stream, msg.type); 
formatter.Serialize(stream, msg.stringData); 

與此:

formatter.Serialize(stream, msg); 

通常我們序列化一個對象,然後我們反序列化的結果,以獲得原始對象。我們不會分別序列化objet的每個屬性,然後將它們分別一個接一個地反序列化。

對於基本的序列化方法,請求者看看here

+0

嘗試過,但它沒有工作System.InvalidCastException:'無法投入'System.String'類型的對象來鍵入'LoginServer.MessageData'。' –

+0

我想我們在這裏錯過了一些東西。你有這個'var stream = new MemoryStream(input); var formatter = new BinaryFormatter(); var data =(MessageData)formatter.Deserialize(stream);'from from FromByteArray'方法不起作用?我想你也改變了'ToByteArray'方法中上面提到的相應代碼。 – Christos

+0

我的MessageData腳本與LoginServer腳本一起使用這裏是我的登錄服務器https://pastebin.com/4dxh29jE –