C# 串行端口-XML文档中有错误(53870)
这里我创建了一个类,用于通过串行端口发送文本文件和图像:C# 串行端口-XML文档中有错误(53870),c#,.net,wpf,serial-port,xml-serialization,C#,.net,Wpf,Serial Port,Xml Serialization,这里我创建了一个类,用于通过串行端口发送文本文件和图像: public class SendItem { private byte[] bytes; private string _fileName; private string _extension; private int bytesSin; public string Extension { get { return _extension; } set {
public class SendItem
{
private byte[] bytes;
private string _fileName;
private string _extension;
private int bytesSin;
public string Extension
{
get { return _extension; }
set { _extension = value; }
}
public string FileName
{
get { return _fileName; }
set { _fileName = value; }
}
public byte[] Bytes
{
get { return bytes; }
set { bytes = value; }
}
public SendItem()
{
}
public void SendFile(SerialPort serialPort1)
{
if (serialPort1.IsOpen)
{
OpenFileDialog OFDialog = new OpenFileDialog();
OFDialog.Title = "Open File";
OFDialog.Filter = "Text Files (*.txt)" + "|*.txt|All files (*.*)|*.*";
OFDialog.InitialDirectory = @"C:\";
bool? userClickedOK = OFDialog.ShowDialog();
if (userClickedOK == true)
{
serialPort1.DiscardInBuffer();
string chosenFile = OFDialog.FileName;
string ext = Path.GetExtension(OFDialog.FileName);
_extension = ext;
byte[] data = File.ReadAllBytes(chosenFile);
SendItem newSendItem = new SendItem();
newSendItem._extension = ext;
newSendItem._fileName = System.IO.Path.GetFileNameWithoutExtension(chosenFile);
newSendItem.bytes = data;
byte[] view = newSendItem.Serialize();
string test = Convert.ToBase64String(data);
serialPort1.Write(newSendItem.Serialize(), 0, newSendItem.Serialize().Length);
//serialPort1.Write(data, 0, data.Length);
}
}
}
public override string ToString()
{
return string.Format("File: {0}{1}",_fileName, _extension);
}
}
SendFile方法中有很多多余的东西,但是我要求忽略它,而代之以我一直在讨论的以下问题
每当我从文本框发送文本文件或纯聊天文本时,都会执行以下代码块,而不会触发catch:
void _sPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
byte[] data = new byte[sp.BytesToRead];
string message = string.Empty;
sp.Read(data, 0, data.Length);
try
{
SendItem receivedObject = data.Deserialize<SendItem>();
File.WriteAllBytes(@"d:\" + receivedObject.FileName + receivedObject.Extension, receivedObject.Bytes);
message = "File has been recieved.";
sp.Write("File sent.");
}
catch (Exception exp)
{
errors = exp.Message;
message = Encoding.UTF8.GetString(data);
}
App.Current.Dispatcher.Invoke(new Action(() => _response.Add("Friend: " + message)));
}
void\u sPort\u数据接收(对象发送方,SerialDataReceivedEventArgs e)
{
SerialPort sp=(SerialPort)发送方;
字节[]数据=新字节[sp.BytesToRead];
string message=string.Empty;
sp.Read(数据,0,数据长度);
尝试
{
SendItem receivedObject=data.Deserialize();
File.writealBytes(@“d:\”+receivedObject.FileName+receivedObject.Extension,receivedObject.Bytes);
message=“文件已收到。”;
sp.Write(“文件已发送”);
}
捕获(异常扩展)
{
错误=exp.消息;
message=Encoding.UTF8.GetString(数据);
}
App.Current.Dispatcher.Invoke(新操作(()=>\u response.Add(“朋友:+消息));
}
当我尝试发送图像时出现问题。。。它触发catch并给出异常XML文档中有错误(53870)
我编写的序列化程序和反序列化程序如下:
public static byte[] Serialize<T>(this T source)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
MemoryStream stream = new MemoryStream();
serializer.Serialize(stream, source);
byte[] buffer = stream.GetBuffer();
stream.Close();
return buffer;
}
public static T Deserialize<T>(this byte[] source)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
MemoryStream stream = new MemoryStream(source);
T result = (T)serializer.Deserialize(stream);
stream.Close();
return result;
}
公共静态字节[]序列化(此T源)
{
XmlSerializer serializer=新的XmlSerializer(typeof(T));
MemoryStream stream=新的MemoryStream();
序列化器。序列化(流、源);
byte[]buffer=stream.GetBuffer();
stream.Close();
返回缓冲区;
}
公共静态T反序列化(此字节[]源)
{
XmlSerializer serializer=新的XmlSerializer(typeof(T));
MemoryStream stream=新的MemoryStream(源);
T result=(T)序列化程序。反序列化(流);
stream.Close();
返回结果;
}
有人能指出我在哪里犯了错误吗?我调试它已经有好几年了,我都没办法控制住它
**编辑:
我还包括了我试图发送的图像的序列化数据,在查看之后,我的字节对于串行端口来说可能太大了-是否有任何方法可以调整这一点或允许串行端口接收发送的所有数据
/9j/4AAQSKZJRGABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARyvfjdaaaabzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJA2MFkghrC/YQPXVRGZQH8SMQMHG7KKYFUXD7WTWEGWJSZP8RGM/fdPD6TD///BAEMACAYGBWYCCAHBJCAOMFA0MCWSMGrITDxQDGH8EHROCHAKLIGIJJWJHBWONYMDE0和QFJK9ODI8LJM0MV/BAEMBCQKKKJJDASMGAYMJIYMJIYMJIYMJIYMJIYMJIYMJIYMJIYMJIYMJIYMJIYMJIYMJIYMYMJIYMYMV/CABEIGAGAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAGaebaqbaqaaaaaaaaaaaaaaaaaaaecawt/2Gamawaaaareceqaaafvryszy1mksgakawbicaaiuuaaquecuecxykz17kaacgfgwglcgaaqfacaabcykcaajzzbqfacaoiggbmsay5aaucbksgtfgggqcokqclsoaitqvcqvagcbruguaicqcuecxykcxygqwqcxo4uqfjjjkwwwwwwqqxoqxo4u7bokqwqwzzzz0zzzzzzzwqwqwqwqwqql1qwwwwqqw9wwqqql1qwwqwqwqwqwql1wql1w9wqwqwqwqwqwQCSBMXPBJYY3AN2UE2x15GALKHC1KGKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJJJYZ6OBKFKKKKKKKKKKKKKKKKKKKKKKKKKKK6KKKKKKKKK6KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK6月6日XX+X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 9H3J852AN6C+bxxr6afN7D6B4/bH2 WWWWWWWTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTWWTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTIULKLIGP819L5KVZ/bo18fV9Ew3Xj5+v15XH0Z6.目前,中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的中国的一个中国的中国的一个中国的中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的中国的一个中国的中国的一个中国的一个中国的中国的一个中国的一个中国的一个中国的中国的中国的一个中国的一个中国的中国的中国的中国的中国的中国的中国P5s16NGVrg6ZLnq2ePnG7Vs/P5s16NGVrg6ZLnq2ePnG7Vs2.这个词的意思是:一个词的意思是:一个词的意思是:一个词的意思是:一个词的意思是:一个词的意思是:这个词的意思是:一个不+第二个词的意思是:一个词的意思是,这个词的意思是:一个词的意思是:一个词的意思是,一个词的意思是:一个单词的意思是:一个不+一个5个新的5个单词的5个单词,或者5个单词的非非非非非5个5个5个5个5个单词的虚拟虚拟虚拟虚拟虚拟虚拟虚拟虚拟虚拟虚拟虚拟虚拟虚拟的5个5个5个虚拟虚拟虚拟虚拟虚拟虚拟虚拟的FFFFFFFJ5 5 5 5 5 5 5 5 5 5五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五个虚拟虚拟虚拟虚拟虚拟虚拟虚拟虚拟FFFFFFFFFJG8VVDPNI1KHAQ9VBSL9HCY52.这个词的意思意思是:这个词的意思意思意思是:这个词的意思意思是:这个词的意思意思是:这个词的意思意思是:这个词的意思意思是:这个词的意思意思是:这个词的意思意思是:这个词的意思意思是:这个词的意思是:这个词的意思是:这个词的意思是:这个词的意思是:这个词的意思是:这个词的意思是:这个词的意思意思是:这个词的意思是一个单词的意思是一个单词的意思是一个单词的意思是一个单词的意思是一个单词的意思意思是一个单词的意思意思是一个单词,意思是一个单词的意思意思是一个单词的意思是,意思是一个单词的意思意思是一个单词的意思意思意思意思是一个单词的意思是一个单词的意思意思意思是一个单词的意思意思是一个单词,或者或者或者或者或者或者是一个单词的意思是一个单词的意思是一个单词的意思是“l5has4naoK9MRWVTHMPR1HE3AJELYIZYZL08MCFS2XK+rmJZmLiWy
byte[] buffer = stream.GetBuffer();
public static byte[] Serialize<T>(this T source)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
MemoryStream stream = new MemoryStream();
serializer.Serialize(stream, source);
return stream.ToArray();
}
public static T Deserialize<T>(this byte[] source)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
return (T) serializer.Deserialize(new MemoryStream(source));
}
byte[] data = new byte[sp.BytesToRead];
string message = string.Empty;
sp.Read(data, 0, data.Length);