I have an XML as shown below.
<?xml version="1.0" encoding="utf-8"?>
<RoleManagement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Permissions>
<Group Name="Test Case Management">
<Permission ID="1" Name="Add/Edit/Delete test cases" />
<Permission ID="2" Name="Assign Test cases to users" />
</Group>
<Group Name="Bug Management">
<Permission ID="9" Name="Add/Edit/Delete bugs" />
<Permission ID="13" Name="View bugs" />
</Group>
<Group Name="Administration">
<Permission ID="19" Name="Database backup" />
<Permission ID="20" Name="Role Management" />
</Group>
</Permissions>
<RolePermissions>
<RolePermission RedmineId="8" PermissionID="9" />
<RolePermission RedmineId="8" PermissionID="13" />
</RolePermissions>
<Roles>
<Role Name="Manager" RedmineId="8" TestlinkId="15" />
</Roles>
</RoleManagement>
I need to load the data from xml to C# classes using XmlSerializer
.
What I have done so Far
I have created these classes.
[Serializable()]
[System.Xml.Serialization.XmlType(AnonymousType = true)]
[System.Xml.Serialization.XmlRoot(Namespace = "", IsNullable = false)]
public partial class RoleManagement
{
private List<Group> permissionGroupsField;
private List<RolePermission> rolePermissionsField;
private List<Role> rolesField;
[System.Xml.Serialization.XmlArrayItem("Group", IsNullable = false)]
public List<Group> PermissionGroups
{
get { return this.permissionGroupsField; }
set { this.permissionGroupsField = value; }
}
[System.Xml.Serialization.XmlArrayItem("RolePermission", IsNullable = false)]
public List<RolePermission> RolePermissions
{
get { return this.rolePermissionsField; }
set { this.rolePermissionsField = value; }
}
[System.Xml.Serialization.XmlArrayItem("Role", IsNullable = false)]
public List<Role> Roles
{
get { return this.rolesField; }
set { this.rolesField = value; }
}
}
[Serializable()]
[System.Xml.Serialization.XmlType(AnonymousType = true)]
public partial class Group
{
private List<Permission> permissionsField;
private string nameField;
[System.Xml.Serialization.XmlElement("Permission")]
public List<Permission> Permissions
{
get { return this.permissionsField; }
set { this.permissionsField = value; }
}
[System.Xml.Serialization.XmlAttribute("Name")]
public string GroupName
{
get { return this.nameField; }
set { this.nameField = value; }
}
}
[Serializable()]
[System.Xml.Serialization.XmlType(AnonymousType = true)]
public partial class Permission
{
private int idField;
private string nameField;
[System.Xml.Serialization.XmlAttribute()]
public int ID
{
get { return this.idField; }
set { this.idField = value; }
}
[System.Xml.Serialization.XmlAttribute()]
public string Name
{
get { return this.nameField; }
set { this.nameField = value; }
}
}
[Serializable()]
[System.Xml.Serialization.XmlType(AnonymousType = true)]
public partial class RolePermission
{
private int redmineIdField;
private int permissionIDField;
[System.Xml.Serialization.XmlAttribute()]
public int RedmineId
{
get { return this.redmineIdField; }
set { this.redmineIdField = value; }
}
[System.Xml.Serialization.XmlAttribute()]
public int PermissionID
{
get { return this.permissionIDField; }
set { this.permissionIDField = value; }
}
}
[System.Xml.Serialization.XmlType(AnonymousType = true)]
public partial class Role
{
private string nameField;
private int redmineIdField;
private int testlinkIdField;
[System.Xml.Serialization.XmlAttribute()]
public string Name
{
get { return this.nameField; }
set { this.nameField = value; }
}
[System.Xml.Serialization.XmlAttribute()]
public int RedmineId
{
get { return this.redmineIdField; }
set { this.redmineIdField = value; }
}
[System.Xml.Serialization.XmlAttribute()]
public int TestlinkId
{
get { return this.testlinkIdField; }
set { this.testlinkIdField = value; }
}
}
My Problem
Data is correctly loaded for <RolePermissions>
node and <Roles>
node. But data for <Permissions>
node are not loading at all. Its always null.
Is there anything else i need to add to get data from list inside another list?
Is there anything I miss?
One of the properties is named incorrectly - name must match parent node name.
You have <Permissions>
so property should be named same. So change this line:
public List<Group> PermissionGroups
to this
public List<Group> Permissions