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

谢维斯

我需要将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到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)
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章