gpt4 book ai didi

使用 IEnumerable 对象的 C# Xml 序列化

转载 作者:太空狗 更新时间:2023-10-30 00:55:26 25 4
gpt4 key购买 nike

每当我尝试序列化一个具有 IEnumerable 集合的对象时,我都会收到一个很大的脏错误,告诉我它不能序列化它,因为它是一个接口(interface)。现在我明白了为什么会这样,但它给我带来了一些其他问题。就像如果我打算在我的对象中有集合并且我想序列化它们我是否需要求助于

  1. 在我的对象中使用 List<>、CollectionBase、ReadOnlyCollectionBase。
  2. 让我的对象实现 IXmlSerializable 接口(interface)。
  3. 用可怕的属性装饰我的类(class)。
  4. 编写我自己的序列化程序。

最佳实践方法是什么?

最佳答案

作为序列化器作者,我确切地知道为什么仅从 IEnumerable<T> 开始稳健工作变得非常困难,特别是对于“只获取”的属性。你可以试试IList<T> (虽然如果它想要一个具体的类型,比如 List<T>/T[] ,我不会感到惊讶),但我怀疑这里真正的问题是你试图使用一个模型来做两件事,并且不高兴有妥协去做。

很好:如果您不想破坏您的域模型,请编写一个用于序列化的单独 DTO 模型,并在它们之间进行映射。这通常是微不足道的,并且允许序列化器和域模型在各自的工作中表现出色。当您需要对系统进行“版本控制”或引入不同的序列化程序(JSON、protobuf 等)时,它也会提供极大的帮助。

再给你的子弹:

  • 我怀疑任何具体的列表类型(甚至是你自己的)Add等会起作用
  • 我不建议任何人这样做——可靠地做是很痛苦的
  • 没有关于属性的丑陋;再一次,我怀疑你的投诉是关于归因于你的模型 - 所以:好的,不要那样做 - 有一个单独的模型;您可以实际上在运行时完成所有这些工作,但工作量要大得多(请参阅 XmlAttributeOverrides ,但如果这样做,请注意程序集泄漏)
  • 不要低估它的工作量;基础 - 非常简单;但非平凡的场景可能是残酷的

关于使用 IEnumerable 对象的 C# Xml 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9537774/

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