c# - 多态 XML 类
问题描述
我有一个控制台应用程序,它调用 3 个不同的 Web 服务操作(基于发送到 exe 的参数)。
每个响应都是一个复杂的数据结构,但非常相似,因此我假设有一种利用多态性的方法,而不是编写 3 个几乎相同的类结构。
例如,响应是 SOAP,因此所有 3 个响应都将具有相同的 Envelope 和 Body 类结构。但是如果 Body 节点中的第一个子节点是 Web 服务的操作(生成相同的对象,但节点名称是唯一的)。
假设这 3 个动作是:action1、action2 和 action3。3 个独特/相似的类结构类似于:
<soap:Envelope xmlns:soap=http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:action1 xmlns:ns1="[url1]" xmlns:ns2="[url2]" xmlns:ns3="[url3]">
<AssetName>MyAsset</AssetName>
<Set>
<ns2:Instructions attribute1="foo" attribute2="bar">
<ns2:childNode1>some</ns2:childNode1>
<ns2:childNode2>more</ns2:childNode2>
<ns2:childNode3>words</ns2:childNode3>
<ns2:MDetail>
<ns3:detail1>blah</ns3:detail1>
<ns3:detail2>blah</ns3:detail2>
<ns3:detail3>blah</ns3:detail3>
</ns2:MDetail>
</ns2:Instructions>
</Set>
</ns1:action1>
</soap:Body>
</soap:Envelope>
<soap:Envelope xmlns:soap=http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:action2 xmlns:ns1="[url1]" xmlns:ns2="[url2]" xmlns:ns3="[url3]">
<AssetName>MyAsset</AssetName>
<Set>
<ns2:Instructions attribute1="foo" attribute2="bar">
<ns2:childNode1>some</ns2:childNode1>
<ns2:childNode2>more</ns2:childNode2>
<ns2:childNode3>words</ns2:childNode3>
<ns2:MDetail>
<ns3:detail1>blah</ns3:detail1>
<ns3:detail2>blah</ns3:detail2>
<ns3:detail3>blah</ns3:detail3>
</ns2:MDetail>
</ns2:Instructions>
</Set>
</ns1:action2>
</soap:Body>
</soap:Envelope>
并且 action3 在 Instructions 节点中有几个不同的属性:
<soap:Envelope xmlns:soap=http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:action3 xmlns:ns1="[url1]" xmlns:ns2="[url2]" xmlns:ns3="[url3]">
<AssetName>MyAsset</AssetName>
<Set>
<ns2:Instructions attribute1="foo" attribute2="bar">
<ns2:childNode1>some</ns2:childNode1>
<ns2:childNode2>more</ns2:childNode2>
<ns2:childNode3>words</ns2:childNode3>
<ns2:childNode4>unique words</ns2:childNode4>
<ns2:childNode5>specific to action3</ns2:childNode5>
<ns2:MDetail>
<ns3:detail1>blah</ns3:detail1>
<ns3:detail2>blah</ns3:detail2>
<ns3:detail3>blah</ns3:detail3>
</ns2:MDetail>
</ns2:Instructions>
</Set>
</ns1:action3>
</soap:Body>
</soap:Envelope>
body 类是第一个可能是唯一的类,因为该类的唯一属性是
[XmlElement(ElementName = "action1", Namespace = "[url1]"]
public action1 Action1 {get;set;}
或者
[XmlElement(ElementName = "action2", Namespace = "[url1]"]
public action2 Action2 {get;set;}
ETC
有没有办法将参数/类型传递给根(信封)类,然后传递给 Body 类和一个构造函数,该构造函数根据我正在处理的操作实例化适当的子类?
解决方案
推荐阅读
- node.js - 在 lambda 中安排 mongo db 议程
- html - Bootstrap 4响应式两列成一列堆叠,而不是打乱
- flutter - 如何在flutter中更改下拉值时调用api?
- java - 使用 JsonConvertor 和 AvroConvertor 发送 STRUCT 的默认值时 Kafka Connect API 错误
- python - 动画 GIF 仅在其第一帧上是透明的(Python PIL)
- oracle - DECODE 函数未在过程中将非 IP 值分配给 NULL
- sql - 如何比较同一表DB2中每组的最后两个数据
- python-3.x - Scipy:如何动态生成函数以进行优化?
- react-native - 使用 Firebase 云消息传递的博览会
- jira - Jira - JS 的访问控制允许来源