2015-11-19 118 views
-1

假设我有这样的XML:反序列化嵌套的XML只

<A> 
<B> 
    <users> 
    <user> 
    <Name>User1</Name> 
    </user> 
    <user> 
    <Name>User2</Name> 
    </user> 
</users> 
</B> 
</A> 

我想反序列化仅users节点。

这是我正在做的事情。

XmlSerializer serializer = new XmlSerializer(typeof(List<User>), new XmlRootAttribute("users")); 

StringReader sr = new StringReader(xmlstring); 
using (var reader = XmlReader.Create(sr)) 
{ 
    var resultda = serializer.Deserialize(reader); 
} 

但它抛出一个异常<A xmlns=''>不是预期的。

+0

的[反序列化为类XML的一部分]可能的复制( http://stackoverflow.com/questions/22083548/deserialize-a-portion-of-xml-into-classes) –

回答

1

你应该定义特定的序列参数User类第一:

[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); 
} 

注意:这样做总是有帮助的牛逼向后如果你有反序列化,意义的任何问题,只是填充对象,并对其进行序列化,尝试/失败,终于找到您预期的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);