繁体   English   中英

仅反序列化嵌套的 xml

[英]Deserialize nested xml only

假设我有这样的 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=''>不是预期的。

您应该首先为 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);
[XmlRoot(Namespace = "www.contoso.com", ElementName = "MyGroupName", DataType = "string", IsNullable=true)]

这应该在您反序列化的类中。


{"<user xmlns=''> 不是预期的。} 反序列化 Twitter XML

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM