C# 对象到字节不工作
我正在尝试将类转换为字节,但没有成功 我收到一个长度为零的字节[](b)。为什么?C# 对象到字节不工作,c#,C#,我正在尝试将类转换为字节,但没有成功 我收到一个长度为零的字节[](b)。为什么? void start() { Item item = new Item(); item.files.Add(@"test"); byte[] b = ObjectToByteArray(item); // b will have zero length } [Serializable] public class Item : ISerializable
void start()
{
Item item = new Item();
item.files.Add(@"test");
byte[] b = ObjectToByteArray(item); // b will have zero length
}
[Serializable]
public class Item : ISerializable
{
public Item()
{
files = new List<string>();
Exclude = false;
CleanEmptyFolder = false;
}
public List<string> files;
public string MusicProfileName;
public bool Exclude;
#region ISerializable Members
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("files", files);
info.AddValue("MusicProfileName", MusicProfileName);
info.AddValue("Exclude", Exclude);
}
#endregion
}
public byte[] ObjectToByteArray(object _Object)
{
using (var stream = new MemoryStream())
{
// serialize object
var formatter = new BinaryFormatter();
formatter.Serialize(stream, _Object);
// get a byte array
var bytes = new byte[stream.Length];
using (BinaryReader br = new BinaryReader(stream))
{
bytes = br.ReadBytes(Convert.ToInt32(stream.Length));
}
return bytes;
}
}
void start()
{
项目=新项目();
item.files.Add(@“test”);
字节[]b=ObjectToByteArray(项);//b的长度为零
}
[可序列化]
公共类项:ISerializable
{
公共项目()
{
文件=新列表();
排除=假;
cleaneEmptyFolder=false;
}
公开文件清单;
公共字符串音乐配置文件名;
公共布尔排除;
#区域ISerializable成员
public void GetObjectData(SerializationInfo信息、StreamingContext上下文)
{
info.AddValue(“文件”,文件);
信息添加值(“MusicProfileName”,MusicProfileName);
信息添加值(“排除”,排除);
}
#端区
}
公共字节[]ObjectToByteArray(对象_对象)
{
使用(var stream=new MemoryStream())
{
//序列化对象
var formatter=新的二进制格式化程序();
序列化(流,_对象);
//获取字节数组
var bytes=新字节[stream.Length];
使用(BinaryReader br=新的BinaryReader(流))
{
bytes=br.ReadBytes(Convert.ToInt32(stream.Length));
}
返回字节;
}
}
在开始读取之前,您没有重置内存流。该位置位于流的末尾,因此得到一个空数组
改用ToArray
方法,无论当前位置如何,它都会获取整个内容:
public byte[] ObjectToByteArray(object _Object) {
using (var stream = new MemoryStream()) {
// serialize object
var formatter = new BinaryFormatter();
formatter.Serialize(stream, _Object);
// get a byte array
return stream.ToArray();
}
}
尝试使用,而不是尝试使用BinaryReader读取MemoryStream:
return stream.ToArray();
问题是您没有重置流,因此它试图从末尾而不是从开头读取。您还可以返回到流的开头:
stream.Seek(0, SeekOrigin.Begin);