2010-05-25 44 views
1

一個字節數組,我想創建一個快捷方式到C#類轉換爲字節數組。我想用我發現了一個例子,直接序列化類的字節數組的:包裝一類的字段到C#

// Convert an object to a byte array 
private byte[] ObjectToByteArray(Object obj) 
{ 
    if(obj == null) 
     return null; 
    BinaryFormatter bf = new BinaryFormatter(); 
    MemoryStream ms = new MemoryStream(); 
    bf.Serialize(ms, obj); 
    return ms.ToArray(); 
} 

但字節數組我得到包含不與在類中的字段的一些其他信息。我想這也是轉換類的屬性。

有沒有辦法只將字段的字段序列化爲字節數組?

感謝

+0

爲什麼?你想做什麼? – SLaks 2010-05-25 18:16:56

+0

我想將類的字段值轉換爲字節數組,所以我可以通過套接字接口將其發送出去。 – alex 2010-05-25 18:28:04

回答

0

格式化不序列屬性。 但它確實增加了一些元數據。 (班級全名等)

而不是bf.Serialize(ms,obj); 你可以使用一個函數inisde只會序列化的領域

bf.Serialize(ms, field1); 
bf.Serialize(ms, field2); 
3

這是我怎麼會序列化類的字段爲byte []對象:

public byte[] ToByteArray() 
{ 
    using(MemoryStream stream = new MemoryStream()) 
    using(BinaryWriter writer = new BinaryWriter(stream)) 
    { 
     writer.Write(MyInt); 
     writer.Write(MyLong); 
     writer.Write(Encoding.UTF8.GetBytes(MyString)); 
     ... 

     return stream.ToArray(); 
    } 
} 
+0

不會連續寫入'MemoryStream'繼續填充緩衝區?要清空流,我會叫'stream.Flush()'? – IAbstract 2010-11-14 19:41:54

+0

也只是爲了檢查 - 你是使用(MemoryStream流...),然後在結束大括號之前,返回'stream.ToArray()'。它是否返回數組中的流內容的副本,以便對'stream'的引用可以被丟棄和正確處置? – IAbstract 2010-11-14 19:46:35

+0

我真的想提高你的答案;然而,由於投票計時器,我不能。我已upvoted但刪除它,直到我完成了你的答案的實施。如果你編輯並且當你這樣做的時候讓我知道,我會提高你的答案。 :/ – IAbstract 2010-11-14 20:58:42

0

您可以防止成員從變量通過與NonSerialized屬性標記他們正在連載如下:

[Serializable] 
public class MyObject 
{ 
    public int n1; 
    [NonSerialized] public int n2; 
    public String str; 
} 

你甚至可以做自己的自定義序列化你r類。你可以閱讀所有關於它在MSDN Documentation的信息。