如何将反序列化属性与我的模型类分开?

时间:2015-02-03 12:39:06

标签: c# serialization

我目前正在开发一个严重依赖.NET序列化程序的应用程序,用于在对象和XML之间来回转换。它工作正常,但将序列化/反序列化属性直接嵌入到我的模型类中就像一个非常糟糕的设计选择。

是否有可能从类本身中提取这些属性?我可以看到我想要实现的一个例子here

提前致谢并度过美好的一天

1 个答案:

答案 0 :(得分:3)

不幸的是,对此的回答并不像您希望的那样简单明了。序列化程序有时需要提示如何将数据的文本表示映射到概念对象表示(反之亦然)。对于XML而言,这通常比JSON更真实,因为它更结构化(元素,属性,命名空间,模式等)。您所引用的EF流畅模型构建器示例不是用于序列化,而是用于映射到/来自关系模式,这与XML序列化完全不同。

即使像JSON.NET这样的工具也有这些属性,当序列化成员的名称与您对象的属性完全匹配时,这些属性是必需的,并且您不想编写自定义转换器。

如果属性污染真的困扰你,那么你可以在模型和XML之间引入另一层。然后,您可以拥有包含属性的类型,并且仅用于与XML进行序列化,然后使用AutoMapper或ValueInjecter等工具将该层转换为模型层。

我也不总是喜欢污染我的类型的属性,例如使用MVC模型验证属性,特别是向EF提供有关我的实体模型如何映射到关系模式的提示。然而,这是一个我觉得合适的例子,因为你用很少量的代码就可以获得很多。

似乎至少有一个流畅的XML序列化工具,但不确定它有多好:

https://fluentlyxml.codeplex.com/

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