//序列化并发送到消息队列:
sqlDataAdapter1.Fill(dataSet11);
try
{
string MessagePath = ".\\private$\\david";
System.Messaging.MessageQueue QueueObject = new System.Messaging.MessageQueue(MessagePath);
System.Messaging.Message MessageObject = new System.Messaging.Message();
MessageObject.Recoverable = true;//保存到文件,防止计算机重新启动丢失
MessageObject.Body = dataSet11.GetXml();//消息内容
MessageObject.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] {typeof(string)});
QueueObject.Send(MessageObject);
}
catch(Exception ExString)
{
MessageBox.Show("系统发送错误:" + ExString.ToString());
}
MessageBox.Show("发送完成!");
-------------------------------------------------------------------------
//接收消息并反序列化:
System.Messaging.MessageQueue queue = new System.Messaging.MessageQueue(".\\Private$\\david");
System.Messaging.Message message = queue.Receive();
message.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] {typeof(string)});
DataSet TempDataSet = (DataSet)message.Body;
dataSet11.Clear();
dataSet11 = (DMSC.DataSet1)TempDataSet;
--------------------------------------------------------------------
当程序执行到DataSet TempDataSet = (DataSet)message.Body;时,报错。
提示如下:其他信息: 无法将作为参数传递的消息反序列化。无法识别序列化格式
那个老大帮忙看看。

解决方案 »

  1.   

    VS2003环境,.Net1.1下的程序。高手帮忙。
      

  2.   

    这句话有问题:
    MessageObject.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] {typeof(string)});改成XML传输格式.原因是DataSet在序列化成xml的时候,会对时间,字符串等等加上特殊标志字符,你如果直接用String传输,到接收端就按照string来反序列化了,自然是错的.
      

  3.   

    在VS2005中有一个根据DataBase来生成DataSet的功能,相当的好用,你可以借鉴一下
    如果实在有问题,贴出来,俺帮你分析......
      

  4.   

    typeof(string), 这是不是有问题
    System.Type.GetType("System.String");typeof 的参数是不是要是实例
      

  5.   

    StreamWriter streamWriter;
    streamWriter.Write(XMLString);
    DataSet set = new DataSet();
    set.ReadXml(streamWriter.BaseStream);