xxx的类型没有预料到。使用XmlInclude或SoapInclude属性指定静态未知的类型

时间:2012-09-19 22:27:01

标签: c# wcf serialization

因此,当我可以在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 {....}

然后是这里的特定类,BAlarmReport(派生自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
}
我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

固定。 叹息

挖掘内部异常导致我遇到了一些类没有无参数构造函数的问题。但是,子类应该使用基类本身的XmlInclude属性声明。