1

我有一个像这样的对象:

public class Intent
{
    public List<Entity> Updates { get; set; }
}

我希望将其序列化为 XML,以便使用 MSMQ 作为消息传递。Entity 类型的列表可以包含任意数量的从 Entity 继承的类的实例。例如,可能有:

public Person : Entity { /* ... */ }
public Vehicle : Entity { /* ... */ }

我正在使用 XmlMessageFormatter,到目前为止我已将其定义为:

XmlMessageFormatter _formatter =
        new XmlMessageFormatter(new[] { typeof(T) });

在这种情况下,T 是 Intent(如上)。

麻烦的是,当代码实际尝试序列化时,会发生以下异常:

The type CoreApi.Domain.Person was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically.

我相信这是因为我需要以某种方式告诉序列化程序 Person 是实体的子类这一事实。

我已经看到基本上需要使用多个 XmlInclude 装饰来装饰 Entity 的解决方案,在我的场景中这是不可行的,因为 Entity 的继承者列表很大并且可能会增长 - 我不想在添加新继承者时不断更新这个列表。

我见过使用 XmlSerializer 的其他解决方案,传入已知类型的列表,问题在于我需要用不兼容的 XmlSerialiser 实例替换 XmlMessageSerialiser。

4

0 回答 0