c# - 仅反序列化 XML 中的特定项目并添加到列表

标签 c# xml serialization

我有一个包含多个项目的 XML 文件,我想一次只反序列化一个特定的项目,而不是所有项目,然后将其添加到列表中。

使用 this site 中的示例,如何仅反序列化 Id=2Product 并将其添加到 productList

类:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
}

代码:

void foo()
{
string xmlString = "<Products><Product><Id>1</Id><Name>My XML product</Name></Product><Product><Id>2</Id><Name>My second product</Name></Product></Products>";

XmlSerializer serializer = new XmlSerializer(typeof(List<Product>), new XmlRootAttribute("Products"));

StringReader stringReader = new StringReader(xmlString);

List<Product> productList = (List<Product>)serializer.Deserialize(stringReader);
}

最佳答案

您可以使用 XDocument 类来查询 Xml:

StringReader stringReader = new StringReader(xmlString);
XDocument document = XDocument.Load(stringReader);

var node = document.Descendants("Product").FirstOrDefault(p => p.Descendants("Id").First().Value == "2");
if(node != null)
{
    XmlSerializer serializer = new XmlSerializer(typeof(Product));
    var xmlReader = new StringReader(node.ToString());
    Product result = serializer.Deserialize(xmlReader) as Product;
}

诚然,这是一个快速而肮脏的解决方案,在某些情况下可能需要进一步分析。

关于c# - 仅反序列化 XML 中的特定项目并添加到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40007793/

相关文章:

c# - 不支持 Entity Framework 转换

c# - 我可以用什么来 asp.net 存储工具提示消息?

php - 使用 Bing.com 和 Bing Search API 的不同结果

java - 从 Java ObjectInputStream 中丢弃坏对象

c# - MonoTouch 和 "Applications are expected to have a root view controller at the end of application launch"错误

c# - Android 模拟器未运行 - Visual Studio 2017

c# - 覆盖 XmlSerialization 的类名

xml - Xpath中的Join操作

java - Jackson 自定义反序列化器打破了其他字段的反序列化

java - getExtras().getSerialized(key) 和 getSerializedExtra(name) 之间有什么区别