首页 / C# / C#:输入流不是有效的二进制格式
C#:输入流不是有效的二进制格式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#:输入流不是有效的二进制格式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2869字,纯文字阅读大概需要5分钟。
内容图文
![C#:输入流不是有效的二进制格式](/upload/InfoBanner/zyjiaocheng/825/5c922956390d48cbac96833e00d746ca.jpg)
我在C#/ ASP.NET中反序列化有问题,它给出了确切的错误:
输入流不是有效的二进制格式.起始内容(以字节为单位)为:41-41-45-41-41-41-44-2F-2F-2F-2F-2F-41-51-41-41-41 …
我想做什么
我有一个有3个班级的结构.我有一个类A,它是一个基类,然后是B和C,它们是从A派生的.
我试图在类型为VARCHAR(MAX)的列中使用LINQ to SQL在数据库中存储随机类型的B和C.
我不能使用BINARY,因为长度大约是15.000.
我的代码……
错误位于LAST代码块中
业务层中的C#代码 – 存储记录
private void AddTraceToDatabase(FightTrace trace)
{
MemoryStream recieverStream = new MemoryStream();
MemoryStream firedStream = new MemoryStream();
MemoryStream moveStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(recieverStream,trace.Reciever);
binaryFormatter.Serialize(firedStream,trace.FiredBy);
binaryFormatter.Serialize(moveStream,trace.Move);
string reciever = Convert.ToBase64String(recieverStream.ToArray());
string fired = Convert.ToBase64String(firedStream.ToArray());
string move = Convert.ToBase64String(moveStream.ToArray());
this.dataAccess.AddFightTrace(trace.TraceType.ToString(),reciever,move,fired,trace.DateTime,this.FightId);
}
数据访问层中的C#代码 – 存储记录
public void AddFightTrace(string type, string reciever, string Move, string firedBy, DateTime firedAt, int fightid)
{
GameDataContext db = new GameDataContext();
dbFightTrace trace = new dbFightTrace();
trace.TraceType = type;
trace.Reciever = reciever;
trace.Move = Move;
trace.FiredBy = firedBy;
trace.FiredAt = firedAt;
trace.FightId = fightid;
db.dbFightTraces.InsertOnSubmit(trace);
db.SubmitChanges();
}
C#代码获取数据库中的条目
public List<dbFightTrace> GetNewTraces(int fightid, DateTime lastUpdate)
{
GameDataContext db = new GameDataContext();
var data = from d in db.dbFightTraces
where d.FightId==fightid && d.FiredAt > lastUpdate
select d;
return data.ToList();
}
C#Factory,从LINQ转换为SQL类到我的对象
这就是错误来了
public FightTrace CreateTrace(dbFightTrace trace)
{
TraceType traceType = (TraceType) Enum.Parse(typeof(TraceType), trace.TraceType);
BinaryFormatter formatter = new BinaryFormatter();
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
MemoryStream recieverStream = new MemoryStream(enc.GetBytes(trace.Reciever));
recieverStream.Position = 0;
MemoryStream firedStream = new MemoryStream(enc.GetBytes(trace.FiredBy));
firedStream.Position = 0;
MemoryStream movedStream = new MemoryStream(enc.GetBytes(trace.Move));
movedStream.Position = 0;
// THE NEXT LINE HERE CAUSES THE ERROR
NPC reciever = formatter.Deserialize(recieverStream) as NPC;
Player fired = formatter.Deserialize(firedStream) as Player;
BaseAttack attack = formatter.Deserialize(movedStream) as BaseAttack;
FightTrace t = new FightTrace(traceType,reciever,attack,fired);
t.TraceId = trace.FightTraceId;
t.DateTime = trace.FiredAt;
return t;
}
因此,在运行第一个Deserialize方法时会发生错误,并出现上述错误.
我尝试了几件事,但我在这一件事上很遗憾.
谢谢!
内容总结
以上是互联网集市为您收集整理的C#:输入流不是有效的二进制格式全部内容,希望文章能够帮你解决C#:输入流不是有效的二进制格式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。