【发布时间】:2023-04-02 02:15:01
【问题描述】:
我需要自动将许多 .NET 对象添加到业务系统中。 PowerShell 脚本需要读取 XML 输入文件并通过业务系统的 API 执行适当的更改。
我发现的问题是对象有许多不同的类型,因此具有不同的属性。
这是一个 XML 示例:
<BusinessObject>
<Action>Add</Action>
<Id>{867B6C43-2A20-485D-A3E3-CBFCD50CA6F3}</Id>
<AssemblyName>ABC.BusinessObjects, Version=1.0.0.0, Culture=neutral, PublicKeyToken=361ad75badc53918</AssemblyName>
<ClassName>ABC.BusinessObjects.HealthService</ClassName>
<!-- Properties specific to object -->
<HealthServiceName>Jo's GP Super Center</HealthServiceName>
</BusinessObject>
<BusinessObject>
<Action>Add</Action>
<Id>{867B6C43-2A20-485D-A3E3-CBFCD50CA6F3}</Id>
<AssemblyName>ABC.BusinessObjects, Version=1.0.0.0, Culture=neutral, PublicKeyToken=361ad75badc53918</AssemblyName>
<ClassName>ABC.BusinessObjects.Patient</ClassName>
<!-- Properties specific to object -->
<PatientName>Anna Smith</PatientName>
</BusinessObject>
脚本的相关部分:
$xmlItem.BusinessObjects.GetElementsByTagName("BusinessObject") | % {
$businessObject = $_
if ($businessObject.Action -eq "Add") {
$assemblyName = $businessObject.AssemblyName
$className = $businessObject.ClassName
$assembly = [Reflection.Assembly]::Load($assemblyName)
$obj = $assembly.CreateInstance($className)
### TODO: How to set properties on $obj ???
$api.AddBusinessObject($obj)
}
}
我可能需要将特定于对象的属性放入它们自己的 XML 元素中,以便循环遍历它们。我不确定在该循环中要做什么。
假设每个属性的 XML 元素名称与 $obj 属性名称匹配,我如何从其对应的 XML 值动态访问和设置属性?
【问题讨论】:
标签: xml reflection powershell mapping