仅对嵌套的xml进行反序列化

时间:2015-11-19 14:45:29

标签: c# xml xmlserializer xml-deserialization

假设我有这样的xml:

cut

我只想反序列化<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); } ,这是不可能的。

2 个答案:

答案 0 :(得分:1)

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

[XmlRoot("users")]
[System.Xml.Serialization.XmlType(TypeName="user")]
public class User
{
    public string Name { get; set; }
}

因为你想阅读&#34;用户&#34;您应首先获取该节点并反序列化该节点:

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

答案 1 :(得分:0)

[XmlRoot(Namespace = "www.contoso.com", ElementName = "MyGroupName", DataType = "string", IsNullable=true)]

这应该是你要反序列化的类。

{"<user xmlns=''> was not expected.} Deserializing Twitter XML