如何将反序列化属性从我的模型类中分离出来?

6
我正在开发一款应用程序,它在对象和XML之间进行转换时严重依赖于.NET序列化器。它工作得很好,但是将序列化/反序列化属性直接嵌入到我的模型类中似乎是一个相当糟糕的设计选择。
有没有可能将这些属性与类本身分离?我想要实现的示例可以在此处看到。
提前感谢您,祝您拥有愉快的一天。

我也想知道这个答案。 - Jonathan Kittell
1
我通常创建基本的DTO类来序列化数据。如果需要,你可以使用像AutoMapper这样的工具来转换数据。 - Matthew Watson
1个回答

3
很不幸,对于这个问题的答案并不像你希望的那样简单明了。有时序列化程序需要提示如何将数据的文本表示映射到概念对象表示(反之亦然)。这通常比JSON更真实,因为它更加结构化(元素、属性、命名空间、模式等)。你提到的EF fluent模型生成器示例不是用于序列化的,而是用于映射到/从关系模式,这与XML序列化非常不同。
即使是像JSON.NET这样的工具也有这些类型的属性,当您序列化成员的名称与对象上的属性不完全匹配,并且您不想编写自定义转换器时,这些属性是必需的。
如果属性污染真的让你很困扰,那么你可以在模型和XML之间引入另一层。然后你可以拥有包含属性并仅用于序列化到和从XML的类型,然后使用类似AutoMapper或ValueInjecter的工具将其从该层转换为你的模型层。
我也不总是喜欢属性污染我的类型,例如MVC模型验证属性,特别是为了给EF提供有关实体模型如何映射到关系模式的提示。但是,在这种情况下,我认为它是适当的,因为您可以通过非常少量的代码获得很多东西。

似乎至少有一个流畅的XML序列化工具,但不确定它的质量如何:

https://fluentlyxml.codeplex.com/

http://trycatchfail.com/blog/post/fluent-xml-serializatione28093introduction.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接