在我的web method
中,我得到了一些第三方 C# 实体类的对象。实体类不过是DataContract
. 这个实体类相当复杂,具有各种类型的属性,有些属性也是集合。当然,那些链接类型也是 DataContracts。
我想将该 DataContract 实体序列化为 XML,作为我的 Web 服务业务逻辑的一部分。我不能DataContractSerializer
直接使用(在我在 web 方法中收到的对象上),因为 XML 模式完全不同。 因此,DataContractSerializer 生成的 XML 不会针对架构进行验证。
我无法得出我应该遵循的实施方法。我可以想到以下实现方法:
LINQ to XML - 这看起来不错,但我需要为每种类型的对象手动创建 XML 树(即类实例的元素或 XML 表示)。由于实体类很多,而且它们相互关联,我认为手动编写 XML 元素的工作量太大。此外,当实体类引入一些新属性时,我将不得不继续修改 XML 树。不仅如此,我生成 XML 树的代码看起来有点笨拙(至少在外观上),并且将来更难由其他开发人员维护/更改;他/她必须仔细查看它才能了解 XML 是如何生成的。
XmlSerializer - 我可以编写自己的实体类来表示我想要的 XML 结构。现在,我需要将传入对象的详细信息复制到我自己的类的对象中。所以这是额外的工作(当代码执行时也适用于.NET!)。然后我可以
XmlSerializer
在我的对象上使用来生成 XML。在这种情况下,我必须创建实体类,并且每当第三方实体被修改时,我只需要在我的类中添加新属性。(使用 XmlElement 或 XmlAttibute 属性)。但是人们推荐DataContractSerializer
这个,所以我不想最终确定这个,除非我对所有方面都很清楚。DataContractSerializer - 同样在这里,我必须编写自己的实体类,因为我无法控制第三方 DataContracts。我需要将传入对象的详细信息复制到我自己的类的对象中。所以这是额外的工作。但是,由于 DataContractSerializer 不支持 Xml 属性,我必须
IXmlSerializable
在方法中实现并生成所需的 XmlWriteXml
。DataContractSerializer 比 XmlSerializer 快,但如果第三方实体发生更改,我将不得不再次处理更改(在 WriteXml 中)。
问题:
- 考虑到性能,在这种情况下哪种方法最好?
- 你能建议一些更好的方法吗?
- 当传入的实体类可能发生变化时,是否
DataContractSerializer
值得考虑(因为它具有更好的性能)?XmlSerilaizer
- LINQ 真的应该用于序列化吗?或者它对查询以外的事情真的有好处吗?
- 在这种情况下,XmlSerializer 是否可以优于 LINQ?如果是,为什么?