序列化 – Linq to Xml VS XmlSerializer VS DataContractSerial
在我的web方法中,我得到了一些第三方C#实体类的对象。实体类只不过是DataContract。这个实体类是相当复杂的,具有各种类型的属性,一些属性也是集合。当然,这些链接类型也是DataContracts。
我想将DataContract实体序列化为XML作为我的Web服务业务逻辑的一部分。我不能直接使用DataContractSerializer(在Web方法中收到的对象),因为XML模式完全不一样。因此,DataContractSerializer生成的XML将不会针对模式进行验证。 我不能总结我应该遵循的做法。我可以想到以下实施方法: > LINQ to XML – 这看起来不错,但是我需要为每种类型的对象手动创建XML树(即类实例的元素或XML表示)。由于有很多实体类并且彼此链接,我认为手动编写XML元素太多了。此外,当实体类引入一些新的属性时,我将不得不继续修改XML Tree。不仅如此,我生成XML树的代码看起来很笨拙(至少在外观上),并且将来更难维护/改变其他开发人员;他/她将必须仔细查看,以了解XML的生成方式。 问题: >考虑到性能,在这种情况下哪种方法最好?
我会选择XmlSerializer,因为它对于自定义模式是最可维护的(假设你有XSD)。完成系统开发之后,请测试其性能,并确定XML序列化是否导致问题。如果是这样,你可以用需要更多工作的东西来替换它,然后再测试一下是否有任何的收获。但是如果XML序列化不是一个问题,那么你有可维护的代码。
与数据库或外部系统进行通信时,解析XML数据的小片段所需的时间可能是微不足道的。在具有大内存(16GB)的系统中,您可能会发现GC是.NET 4及更早版本(.NET 4.5尝试解决此问题)的瓶颈,特别是在处理非常大的数据集和流时。 使用AutoMapper将由XSD.EXE创建的对象映射到您的实体。这将允许数据库设计更改而不影响Web服务。 关于LINQ to XML的一件好事是XSD validation.然而,这影响了性能。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |