【问题标题】:The type xxx was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically类型 xxx 不是预期的。使用 XmlInclude 或 SoapInclude 属性指定静态未知的类型
【发布时间】: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


【解决方案1】:

已修复。 叹息

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

【讨论】:

    猜你喜欢
    • 2012-08-06
    • 1970-01-01
    • 2020-07-20
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 2020-09-02
    相关资源
    最近更新 更多