C# 仅反序列化嵌套xml

C# 仅反序列化嵌套xml,c#,xml,xmlserializer,xml-deserialization,C#,Xml,Xmlserializer,Xml Deserialization,假设我有如下xml: <A> <B> <users> <user> <Name>User1</Name> </user> <user> <Name>User2</Name> </user> </users> </B> </A> 但是它抛出了一个异常,这是不期望的 [XmlRoot(

假设我有如下xml:

<A>
 <B>
  <users>
   <user>
    <Name>User1</Name>
   </user>
   <user>
    <Name>User2</Name>
   </user>
</users>
 </B>
</A>
但是它抛出了一个异常
,这是不期望的

[XmlRoot(Namespace = "www.contoso.com", ElementName = "MyGroupName", DataType = "string", IsNullable=true)]
这应该在反序列化到的类中



您应该首先为用户类定义特定的序列化参数:

[XmlRoot("users")]
[System.Xml.Serialization.XmlType(TypeName="user")]
public class User
{
    public string Name { get; set; }
}
由于您希望读取“用户”节点,因此应首先获取该节点并反序列化该节点:

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xmlstring);
XmlNode usersNode = xmlDocument.SelectSingleNode("A/B/users");

StringReader sr = new StringReader(usersNode.OuterXml);
using (var reader = XmlReader.Create(sr))
{
    List<User> resultda = (List<User>)serializer.Deserialize(reader);
    Console.WriteLine(resultda.Count);
}
XmlDocument XmlDocument=new XmlDocument();
LoadXml(xmlstring);
XmlNode usersNode=xmlDocument.SelectSingleNode(“A/B/users”);
StringReader sr=新的StringReader(usersNode.OuterXml);
使用(var reader=XmlReader.Create(sr))
{
List resultda=(列表)序列化程序。反序列化(读取器);
控制台写入线(resultda.Count);
}
注意:如果您在反序列化方面遇到任何问题,向后执行总是很有帮助的,也就是说,只需填充对象并对其进行序列化,然后尝试/失败,最后获得预期的xml格式

        List<User> users = new List<User>();
        users.Add(new User { Name = "User 1" });
        users.Add(new User { Name = "User 2" });
        new XmlSerializer(typeof(List<User>), new XmlRootAttribute("users")).Serialize(Console.OpenStandardOutput(), users);
列表用户=新列表();
添加(新用户{Name=“User 1”});
添加(新用户{Name=“User 2”});
新的XmlSerializer(typeof(List),新的XmlRootAttribute(“用户”)).Serialize(Console.OpenStandardOutput(),users);
        List<User> users = new List<User>();
        users.Add(new User { Name = "User 1" });
        users.Add(new User { Name = "User 2" });
        new XmlSerializer(typeof(List<User>), new XmlRootAttribute("users")).Serialize(Console.OpenStandardOutput(), users);