首页 > 解决方案 > 如何反序列化具有不同类型属性的 XML 数组

问题描述

我有这个要反序列化并稍后重新序列化的 XML:

<SecurityCustomizationData xmlns="http://schemas.datacontract.org/2004/07/Microsoft.Dynamics.AX.Security.Management" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <_x003C_CustomizationsForTypeList_x003E_k__BackingField>
    <BaseRepositoryCustomizations i:type="RepositoryCustomizationsOfAxSecurityRoleNcCATIYq">
    </BaseRepositoryCustomizations>
    <BaseRepositoryCustomizations i:type="RepositoryCustomizationsOfAxSecurityDutyNcCATIYq">
    </BaseRepositoryCustomizations>
    <BaseRepositoryCustomizations i:type="RepositoryCustomizationsOfAxSecurityPrivilegeNcCATIYq">
    </BaseRepositoryCustomizations>
  </_x003C_CustomizationsForTypeList_x003E_k__BackingField>
</SecurityCustomizationData>

除了复制这个问题之外,还有更多内容就足够了。我已经尝试过“将 XML 粘贴到类”方法,但是序列化程序无法克服类型属性RepositoryCustomizationsOfAxSecurityRoleNcCATIYq等。

我试图根据该代码编写自己的类,但它甚至不会尝试反序列化最里面的元素。

[XmlRoot(Namespace = "http://schemas.datacontract.org/2004/07/Microsoft.Dynamics.AX.Security.Management")]
public class SecurityCustomizationData
{
    [System.Xml.Serialization.XmlArrayAttribute("<CustomizationsForTypeList>k__BackingField")]
    [XmlArrayItem(Type = typeof(RoleRepoCust))]
    [XmlArrayItem(Type = typeof(DutyRepoCust))]
    [XmlArrayItem(Type = typeof(PrivilegeRepoCust))]
    public BaseRepositoryCustomizations[] CustomizationsForTypeListk__BackingField
    {
        get;
        set;
    }
}

public class BaseRepositoryCustomizations
{
}

[XmlType(TypeName = "RepositoryCustomizationsOfAxSecurityRoleNcCATIYq", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public class RoleRepoCust : BaseRepositoryCustomizations
{
}
[XmlType(TypeName = "RepositoryCustomizationsOfAxSecurityDutyNcCATIYq", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public class DutyRepoCust : BaseRepositoryCustomizations
{
}
[XmlType(TypeName = "RepositoryCustomizationsOfAxSecurityPrivilegeNcCATIYq", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public class PrivilegeRepoCust : BaseRepositoryCustomizations
{
}

我发现的所有关于 XmlArrayItemAttribute 的示例都使用不同的元素名称来选择正确的类。我也尝试对项目只使用一个类,但是我遇到了与生成的类相同的问题:i:type 属性导致错误。

标签: c#xml-serialization

解决方案


推荐阅读