Reflection 通过配置文件和反射在运行时自动映射vs映射

Reflection 通过配置文件和反射在运行时自动映射vs映射,reflection,orm,mapping,linq-to-xml,automapper,Reflection,Orm,Mapping,Linq To Xml,Automapper,我不熟悉这个话题,我想知道你对我应该做什么或如何解决以下问题的看法: 我正在开发一个C#web服务客户端,它从web服务背后的数据库检索数据。web服务响应将数据作为XML保存在CDATA元素中。xsd模式可用。XML中的元素表示一个数据集/行。我只需要使用一个数据集的几个字段。检索到数据后,我必须检查一些业务规则/条件,并将这些字段写入另一个系统。从另一个系统读取一些值,检查一些业务规则,并将它们发送回根据模式以适当的XML格式封装的web服务 我到目前为止所做的一切。我使用XSD.exe根据

我不熟悉这个话题,我想知道你对我应该做什么或如何解决以下问题的看法:

我正在开发一个C#web服务客户端,它从web服务背后的数据库检索数据。web服务响应将数据作为XML保存在CDATA元素中。xsd模式可用。XML中的元素表示一个数据集/行。我只需要使用一个数据集的几个字段。检索到数据后,我必须检查一些业务规则/条件,并将这些字段写入另一个系统。从另一个系统读取一些值,检查一些业务规则,并将它们发送回根据模式以适当的XML格式封装的web服务

我到目前为止所做的一切。我使用XSD.exe根据底层模式生成c#类。我想我有以下选项来完成我的场景工作:

  • ORM框架: 这对我的应用程序来说应该是过分了。或者这不是一个解决方案,因为我不直接与数据库通信

  • 自动映射器: 这似乎是一个很好的解决办法。但我认为它并不像我的3。选项(见下文)。如果在部署我的应用程序后检测到映射错误,我必须重新构建应用程序。另一个缺点是,如果模式发生变化,我将不得不重新构建我的应用程序。(或者我总是根据模式调整我的应用程序?)

  • 通过自定义映射文件和反射: 我不确定这是否真的可以实现,但在我看来,这将是最灵活的解决方案。解决方案与此类似 如果我对本文的理解是正确的,那么就会有一个配置文件将类的类型及其属性映射到目标类型,例如: SourceClassType=ClassA,SourcePropertyName=PropA->DestinationClassType=ClassB,DestinationPropertyName=PropX

  • Linq2Xml: 使用Linq2Xml,我可以从XML中提取所需的数据,并将其放入自己定义的类中。但是,如何根据web服务所期望的模式将数据放回XML中呢

  • 我的分析正确吗?我误解了什么吗?你推荐什么?我还有其他选择吗

    如果在部署我的应用程序后检测到映射错误,我将 必须重新构建应用程序。另一个不利的方面是,如果 架构更改后,我必须再次重建我的应用程序。(或者我有 是否始终根据架构调整我的应用?)

    有不同的方法可以避免由于所需的代码更改而不得不重建应用程序。一种方法是动态编译和使用组件。例如,这可以是源代码文件。这一决策涉及许多因素,例如需要多长时间进行一次变更、由谁进行变更、绩效的重要性等

    另一种选择是使用xslt将xml输入转换为xml输出,但这可能取决于业务规则中的具体需求

    我要做的是使用xml(反)序列化和自动映射。将xml反序列化为对象,使用automapper和自定义业务逻辑将源对象转换为目标对象,然后将目标对象序列化为xml作为输出