我正在尝试将消息(复杂类型)发送到消息队列。我收到错误ETravel.Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable
。下面是代码。
public void QueueMessage(EmailMessage message)
{
Message msg = new Message();
msg.Body = message;
msg.Recoverable = true;
msg.Formatter = new BinaryMessageFormatter();
string queuePath = @".\private$\WebsiteEmails";
//InsureQueueExists(queuePath);
MessageQueue msgQ;
msgQ = new MessageQueue(queuePath);
msgQ.Formatter = new BinaryMessageFormatter();
msgQ.Send((object)msg);
}
复杂类型EmailMessage如下。
public class EmailMessage
{
public string subject { get; set; }
public string message { get; set; }
public string from { get; set; }
public string to { get; set; }
}
先谢谢。
我已经安装了MessageQueue。
O / s:windows xp。
使用的技术:Asp.net mvc。
答案 0 :(得分:2)
您是否将此课程标记为[可序列化]?
[Serializable]
public class EmailMessage
{ ..... }
另外 你没有方法来序列化它 当您使用非内置对象
时,您应该告诉如何使用序列化对象//Deserialization
public EmailMessage(SerializationInfo info, StreamingContext ctxt)
{
to = (string)info.GetValue("to", typeof(string));
from = (String)info.GetValue("from", typeof(string));
// add other stuff here
}
//Serialization function.
public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
{
// then you should read the same with "EmployeeId"
info.AddValue("to", to);
info.AddValue("from", from);
}
编辑:对不起我想的是BinaryFormatter而不是BinaryMessageFormatter。虽然你仍然可以尝试它,看它是否有效。
问候