我是这个主题的新手,我想知道你的意见我应该做什么或如何解决以下问题:
我正在开发一个C#Web服务客户端,它从Web服务后面的数据库中检索数据。 Web服务响应将数据作为XML保存在CDATA元素中。 xsd架构可用。在XML中是表示一个数据集/行的元素。我只需要使用一个数据集的几个字段。检索数据后,我必须检查一些业务规则/条件,并将这些字段写入另一个系统。从其他系统读取一些值,检查一些业务规则并将它们发送回根据模式封装在适当XML格式中的Web服务。
到目前为止我做了什么。我使用XSD.exe根据底层架构生成c#类。我想我有以下选项让我的方案工作:
ORM框架: 这应该是我的应用程序的矫枉过正。或者它不是解决方案,因为我不直接与数据库通信。
Automapper: 似乎是一个很好的解决方案。但我认为这不像我的3.选项那样灵活(见其他)。如果在部署应用程序后检测到映射中的错误,我必须重建应用程序。另一个负面因素是,如果架构发生变化,我将不得不重新构建我的应用程序。 (或者我是否总是根据架构调整我的应用程序?)
通过自定义映射文件和反射: 我不确定这是否真的可以实现,但在我看来这将是最灵活的解决方案。解决方案与此http://www.techrepublic.com/article/applied-reflection-dynamically-accessing-properties-of-a-class-at-runtime/6099345类似 如果我理解这篇文章是正确的,那么会有一个配置文件将类的类型及其属性映射到目标类型,例如: SourceClassType = ClassA,SourcePropertyName = PropA-> DestinationClassType = ClassB,DestinationPropertyName = PropX。
Linq2Xml: 使用Linq2Xml,我可以从XML中提取所需的数据并将其放在我自己定义的类中。但是,如何根据Web服务期望的架构将数据放回XML中?
我的分析是否正确?我误解了什么吗?你会推荐什么?我有其他选择吗?
答案 0 :(得分:0)
如果在我的应用程序部署后检测到映射中的错误,我 必须重建应用程序。另一个负面因素是,如果是 架构更改,我将不得不重新建立我的应用程序。 (或者我有 总是根据架构调整我的应用程序?)
有许多方法可以避免由于所需的代码更改而无法重建应用程序。一种方法是动态编译和使用组件。例如,这可以是源代码文件。这一决定涉及许多因素,例如需要多久更改一次,谁将进行更改,性能有多重要等等。
另一种选择可能是使用xslt将xml输入转换为xml输出,但这可能取决于业务规则中的具体要求。
我要做的是使用xml(de)序列化和Automapper。将xml反序列化为对象,使用automapper和自定义业务逻辑将源转换为目标对象,然后将目标对象序列化为xml作为输出。