仅反序列化嵌套 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=''>
不是预期的。
[XmlRoot(Namespace = "www.contoso.com", ElementName = "MyGroupName", DataType = "string", IsNullable=true)]
这应该在您重新反序列化到的 class 中。
{"<user xmlns=''> was not expected.} Deserializing Twitter XML
您应该先为您的用户 class 定义特定的序列化参数:
[XmlRoot("users")]
[System.Xml.Serialization.XmlType(TypeName="user")]
public class User
{
public string Name { get; set; }
}
既然你想读取"users"节点,你应该首先获取该节点并反序列化该节点:
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);
}
注意:如果您在反序列化方面有任何问题,向后进行总是有帮助的,意思是,只需填充对象并对其进行序列化,try/fail 并最终达到您期望的 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);
假设我 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=''>
不是预期的。
[XmlRoot(Namespace = "www.contoso.com", ElementName = "MyGroupName", DataType = "string", IsNullable=true)]
这应该在您重新反序列化到的 class 中。
{"<user xmlns=''> was not expected.} Deserializing Twitter XML
您应该先为您的用户 class 定义特定的序列化参数:
[XmlRoot("users")]
[System.Xml.Serialization.XmlType(TypeName="user")]
public class User
{
public string Name { get; set; }
}
既然你想读取"users"节点,你应该首先获取该节点并反序列化该节点:
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);
}
注意:如果您在反序列化方面有任何问题,向后进行总是有帮助的,意思是,只需填充对象并对其进行序列化,try/fail 并最终达到您期望的 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);