c#-(反序列化)“二进制流不包含有效的BinaryHeader”错误?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-(反序列化)“二进制流不包含有效的BinaryHeader”错误?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1899字,纯文字阅读大概需要3分钟。
内容图文
![c#-(反序列化)“二进制流不包含有效的BinaryHeader”错误?](/upload/InfoBanner/zyjiaocheng/671/1724cce0c4b448efb2905263bdf2efa3.jpg)
我在“对象到字节不起作用”之前创建了一个帖子.
我修复了用户说的问题,但仍然存在问题.
错误消息:找不到反序列化“ WindowsFormsApplication1.Form1项”类型的对象的构造函数.
void start()
{
Item item = new Item();
item.files.Add(@"test");
byte[] b = ObjectToByteArray(item);
Item k = Desriles(b);
}
[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;
}
}
public Item Desriles(byte[] items)
{
using (MemoryStream stream = new MemoryStream())
{
stream.SetLength(items.LongLength);
stream.write(items, 0, items.Length);
var formatter = new BinaryFormatter();
stream.Seek(0, SeekOrigin.Begin);
object item = formatter.Deserialize(stream); // Here I will get error
return (Item)item;
}
}
解决方法:
序列化代码无法正常工作,您忘记了将流重新设置为开始.更好的鼠标陷阱:
public byte[] ObjectToByteArray(object _Object) {
using (var stream = new MemoryStream()) {
var formatter = new BinaryFormatter();
formatter.Serialize(stream, _Object);
return stream.ToArray();
}
}
反序列化代码可以类似地简化:
public Item Desriles(byte[] items) {
using (MemoryStream stream = new MemoryStream(items)) {
var formatter = new BinaryFormatter();
return (Item)formatter.Deserialize(stream);
}
}
而且您不需要GetObjectData().
内容总结
以上是互联网集市为您收集整理的c#-(反序列化)“二进制流不包含有效的BinaryHeader”错误?全部内容,希望文章能够帮你解决c#-(反序列化)“二进制流不包含有效的BinaryHeader”错误?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。