C# 仅反序列化嵌套xml
假设我有如下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(
<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);