C# 使用XmlSerializer C将数据从XML加载到类#

C# 使用XmlSerializer C将数据从XML加载到类#,c#,xmlserializer,C#,Xmlserializer,我有一个如下所示的XML <?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">

我有一个如下所示的XML

<?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>
我的问题


已为
节点和
节点正确加载数据。但是,
节点的数据根本没有加载。它总是空的

为了从另一个列表中的列表获取数据,我还需要添加其他内容吗


有什么我错过的吗

其中一个属性命名不正确-名称必须与父节点名称匹配。 您有
,所以属性的名称应该相同。因此,改变这一行:

public List<Group> PermissionGroups
公共列表权限组
对此

public List<Group> Permissions
公共列表权限

使用这些类,我能够正确地反序列化XML:

[Serializable]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class RoleManagement
{

    /// <remarks/>
    [System.Xml.Serialization.XmlArrayItemAttribute("Group", IsNullable = false)]
    public List<RoleManagementGroup> Permissions { get; set; }

    /// <remarks/>
    [System.Xml.Serialization.XmlArrayItemAttribute("RolePermission", IsNullable = false)]
    public List<RoleManagementRolePermission> RolePermissions { get; set; }

    /// <remarks/>
    public RoleManagementRoles Roles { get; set; }
}

/// <remarks/>
[Serializable]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class RoleManagementGroup
{
    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("Permission")]
    public List<RoleManagementGroupPermission> Permission { get; set; }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Name { get; set; }
}

/// <remarks/>
[Serializable]

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class RoleManagementGroupPermission
{

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public byte ID { get; set; }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Name { get; set; }
}

/// <remarks/>
[Serializable]

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class RoleManagementRolePermission
{

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public byte RedmineId { get; set; }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public byte PermissionID { get; set; }
}

/// <remarks/>
[Serializable]

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class RoleManagementRoles
{

    /// <remarks/>
    public RoleManagementRolesRole Role { get; set; }
}

/// <remarks/>
[Serializable]

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class RoleManagementRolesRole
{

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Name { get; set; }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public byte RedmineId { get; set; }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public byte TestlinkId { get; set; }
}
[可序列化]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace=”“,IsNullable=false)]
公共部分类角色管理
{
/// 
[System.Xml.Serialization.XmlArrayItemAttribute(“组”,IsNullable=false)]
公共列表权限{get;set;}
/// 
[System.Xml.Serialization.XmlArrayItemAttribute(“角色权限”,IsNullable=false)]
公共列表角色权限{get;set;}
/// 
公共角色管理角色{get;set;}
}
/// 
[可序列化]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类RoleManagementGroup
{
/// 
[System.Xml.Serialization.xmlementAttribute(“权限”)]
公共列表权限{get;set;}
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字符串名称{get;set;}
}
/// 
[可序列化]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类RoleManagementGroupPermission
{
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字节ID{get;set;}
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字符串名称{get;set;}
}
/// 
[可序列化]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类RoleManagementRolePermission
{
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字节RedmineId{get;set;}
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字节权限ID{get;set;}
}
/// 
[可序列化]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类RoleManagementRoles
{
/// 
公共角色管理角色角色角色{get;set;}
}
/// 
[可序列化]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类RoleManagementRolesRole
{
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字符串名称{get;set;}
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字节RedmineId{get;set;}
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字节TestlinkId{get;set;}
}
测试代码:

string xml = @"<?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>";

RoleManagement roleManagement;

// convert string to stream
byte[] byteArray = Encoding.UTF8.GetBytes(xml);

using (MemoryStream stream = new MemoryStream(byteArray))
{
    XmlSerializer serializer = new XmlSerializer(typeof(RoleManagement));

    using (XmlReader reader = XmlReader.Create(stream))
    {
        roleManagement = (RoleManagement)serializer.Deserialize(reader);
    }
}
stringxml=@”
";
角色管理角色管理;
//将字符串转换为流
byte[]byteArray=Encoding.UTF8.GetBytes(xml);
使用(MemoryStream stream=新的MemoryStream(byteArray))
{
XmlSerializer serializer=新的XmlSerializer(typeof(RoleManagement));
使用(XmlReader=XmlReader.Create(stream))
{
roleManagement=(roleManagement)序列化程序。反序列化(读取器);
}
}

如何从文件反序列化?我可以在Visual Studio for xml中通过“特殊粘贴”生成这些类。但是我想指定我自己的班级名称,非常感谢。这就是我所怀念的。
string xml = @"<?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>";

RoleManagement roleManagement;

// convert string to stream
byte[] byteArray = Encoding.UTF8.GetBytes(xml);

using (MemoryStream stream = new MemoryStream(byteArray))
{
    XmlSerializer serializer = new XmlSerializer(typeof(RoleManagement));

    using (XmlReader reader = XmlReader.Create(stream))
    {
        roleManagement = (RoleManagement)serializer.Deserialize(reader);
    }
}