C# 对象到字节不工作

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

我正在尝试将类转换为字节,但没有成功

我收到一个长度为零的字节[](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
    {
        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);