c# - 将 XML 反序列化为简单的单个数组

标签 c# xml xml-deserialization

我需要将 XML 反序列化为一个简单的对象数组,但不太清楚如何做到这一点。这是我的简化 XML:

<?xml version="1.0" encoding="Windows-1250"?>
<document>
    <datasets>
        <dataset0>
            <rows>
                <row>
                    <fields>
                        <id>1</id>
                        <name>Cat1</name>
                    </fields>
                </row>
                <row>
                    <fields>
                        <id>2</id>
                        <name>Cat2</name>
                    </fields>
                </row>                
            </rows>
        </dataset0>
    </datasets>
</document>

我已经为要反序列化的对象创建了类

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

以及反序列化代码

XmlSerializer xmlSerializer = new XmlSerializer(typeof(Category[]), new XmlRootAttribute("rows"));

using (FileStream myFileStream = categoryFile.OpenRead())
{        
    var categoryArray = (Category[])xmlSerializer.Deserialize(myFileStream);
}

这显然不起作用,我尝试了各种 XmlElement 和 XmlRoot 标记,但我不太知道我在做什么,所以我将其全部删除以避免公开尴尬。感谢您的任何意见。

最佳答案

您想要反序列化的对象似乎与您的 xml 文件不完全兼容。因此,在这种情况下,使用 Linq to xml 解决方案可能会更加灵活。

var xDocument = XDocument.Parse(xml);
var categoryList = xDocument.Descendants("fields").Select(x => new Category
{
    Name = x.Element("name").Value,
    Id = int.Parse(x.Element("id").Value)
});

关于c# - 将 XML 反序列化为简单的单个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48448272/

相关文章:

java - 如何使用java从xml文件中获取最后5个元素

java - JAXB如何处理继承

c# - 用android反序列化数据?

c# - 将此 XML 反序列化为对象的最佳方法

c# - EF 代码第一个 NotMapped 属性

c# - 如何聚焦模式对话框单击 C# 中的通知图标?

python - 如何使用scrapy的XmlFeedSpider解析sitemap.xml文件?

c# - 将 XML 反序列化为从基类 C# 派生的对象

c# - 如何断言是否使用 nunit 调用了方法

c# - @ 的虚拟键?键注入(inject) C#