gpt4 book ai didi

c# - 使用 LINQ,如何将分层 XML 加载到 POCO 中?

转载 作者:数据小太阳 更新时间:2023-10-29 02:58:32 25 4
gpt4 key购买 nike

我想使用 LINQ 从分层 XML 数据构建一个 C# 对象。我已将 XML 作为 XDocument 加载(首先将 XML 从文件读入字符串)。我需要一些关于如何解析它的指导。

从 XML 文件读取的示例字符串为

<?xml version="1.0" encoding="utf-8" ?>
<categories version="1.0">
<category id="0" name="women" description="test">
<category id="01" name="tops" description="test"></category>
<category id="02" name="bottoms" description="test"></category>
<category id="03" name="accessories" description="test"></category>
</category>
<category id="1" name="men" description="test">
<category id="11" name="shirts" description="test"></category>
<category id="12" name="trousers" description="test"></category>
<category id="13" name="accessories" description="test"></category>
</category>
<category id="2" name="kids &amp; baby" description="test" />
<category id="3" name="home &amp; living" description="test" />
</categories>

我有这样一个 POCO 类:

[DataContract]
public class Category
{
[DataMember]
public int Id { get; set; }

[DataMember]
public string Name { get; set; }

[DataMember]
public string Description { get; set; }

[DataMember]
public List<Category> SubCategories { get; set; }
}

最佳答案

你有两个选择。

  1. 使用 .NET 序列化,在这种情况下,您需要通过使用适当的属性(属性名称⇄ XML 元素名称)装饰您的 POCO 类来指定 XML 映射。

  2. 使用 LINQ to XML(如您所愿)。在这种情况下,代码可能如下所示:

    var categories = x.Root.Elements().Select(e =>
    new Category
    {
    Id = int.Parse(e.Attribute("id").Value),
    Name = e.Attribute("name").Value,
    Description = e.Attribute("description").Value,
    SubCategories = e.Elements().Select(e1 =>
    new Category
    {
    Id = int.Parse(e1.Attribute("id").Value),
    Name = e1.Attribute("name").Value,
    Description = e1.Attribute("description").Value
    }).ToList()
    }).ToList();

    或者递归地,通过将​​递归方法 Parse 添加到您的类中:

    public static Category Parse(XElement value)
    {
    return new Category
    {
    Id = int.Parse(value.Attribute("id").Value),
    Name = value.Attribute("name").Value,
    Description = value.Attribute("description").Value,
    SubCategories = value.Elements().Select(newvalue => Parse(newvalue)).ToList()
    };
    }

    并这样调用它:

    var categories = x.Root.Elements().Select(e => Category.Parse(e)).ToList();

关于c# - 使用 LINQ,如何将分层 XML 加载到 POCO 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9186942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com