gpt4 book ai didi

c#-4.0 - XmlSerializer,具有动态内容的 XmlArray ......如何?

转载 作者:行者123 更新时间:2023-12-04 06:29:52 24 4
gpt4 key购买 nike

首先:这也适用于 REST deseraliaztion,因此自定义 XmlSerializer 是不可能的。

我有一个类的 hjierarchy,需要从“信封”进行序列化和反序列化。它有一个名为“Items”的数组元素,可以包含抽象“Item”的子类。

[XmlArray("Items")]
public Item [] Items { get; set; }

现在我需要添加 XmlArrayItem,但数量不是“固定的”。到目前为止,我们使用反射来查找所有具有 KnownTypeProvider 的子类,因此很容易使用新的子类型扩展程序集。我真的不想在这里对所有项目进行硬编码。

相应地定义了该类:
[XmlRoot]
[KnownType("GetKnownTypes")]
public class Envelope {

但它没有帮助。

将项目更改为:
[XmlArray("Items")]
[XmlArrayItem(typeof(Item))]
public Item [] Items { get; set; }

结果是:

{"The type xxx.Adjustment was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically."}



尝试序列化时。

任何人都知道如何使用 XmlInclude 指向已知类型的提供程序?

最佳答案

已知类型属性不适用于 XmlSerializer。它仅由 DataContractSerializer 使用。我很确定您可以在 WCF 中交换序列化程序,因为我已经为 DataContractSerializer 完成了这项工作。但如果这不是一个选项,您必须自己实现 IXmlSerializable 并在那里处理类型查找。

在取消此解决方案的资格之前:您只需为替换 Item[] 的特殊类实现 IXmlSerializable。其他一切都可以由默认序列化程序处理。

关于c#-4.0 - XmlSerializer,具有动态内容的 XmlArray ......如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5550987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com