【发布时间】:2012-09-19 22:27:01
【问题描述】:
所以当我可以在 MSMQ 上放置消息时,旧代码库工作正常。但是,我收到的新代码库不起作用,老实说,我不知道我缺少什么。
基类:
[DataContract]
[KnownType(typeof (ReportA))]
[KnownType(typeof (AUpdate))]
[KnownType(typeof (AStatusReport))]
[KnownType(typeof (MsgHeader))]
[KnownType(typeof(BRegistationReport))]
[KnownType(typeof(BAlarmReport))]
[KnownType(typeof(AlarmData))]
[KnownType(typeof(DmpAlarmData))]
public class MyMessage {....}
那么这里的具体类,BAalarmReport(派生自MyMessage):
[DataContract]
public class BAlarmReport: MyMessage
{ ... }
然后您可以将 AlarmData 作为继承自 DmpAlarmData 的基础:
[DataContract]
public class DmpAlarmData : AlarmData
{ .. }
我把它放在 MSMQ 上的方式和以前一样,直到我得到新的代码库:
var queue = new MessageQueue(@"FormatName:Direct=OS:" + mMSMQQueueNameAndLocation);
var msg = new Message {Body = MyMessage.CreateMessage() };
using (var ts = new TransactionScope(TransactionScopeOption.Required))
{
queue.Send(msg, MessageQueueTransactionType.Automatic); // send the message
ts.Complete(); // complete the transaction
}
我错过了什么吗?
【问题讨论】:
-
好的,所以添加 [XmlInclude(typeof(DmpAlarmData))] 似乎奏效了,这很奇怪。但是由于可能有几种类型的类派生自 AlarmData,添加 [XmlInclude(AnotherAlarmData))] 会导致它无法反映类型 AlarmData 即使被反序列化的对象实际上是 DmpAlarmData??
标签: c# wcf serialization