作为重复发布的链接在我的情况下并没有真正帮助:但是这个答案是 Read a XML tree structure recursively in a List<T> with children lists<T>
另外,我确实提到我不知道我的问题的关键词,是递归,所以我当时找不到合适的答案。
在下面的XML示例中,我们有一个条目。一个条目可以包含另一个条目,该条目可以包含另一个条目,依此类推。
<entry name="sales" label="Sales">
<entry name="discounts" label="Discounts" entity="sales_discount" />
<entry name="discount_add" label="New Discount" entity="sales_discount" view="add" />
<entry name="users" label="Users" entity="sys_user" />
</entry>
c#中的等价物
public interface IMenuEntry
{
string Name { get; set; }
string Label { get; set; }
IEntity Entity { get; set; }
ViewType View { get; set; }
IEnumerable<IMenuEntry> MenuEntries { get; set; }
}
我知道如何将xml加载并保存到.net并返回。
我的问题在于实施。如果我们事先知道一个条目只能包含一个其他条目,那么每个循环都会做一个简单的事情。
var entries = new List<MenuEntry>();
foreach (var xMainEntry in xMainEntries)
{
var xMainEntryName = xMainEntry.Attribute("name").Value;
var xMainEntryLabel = xMainEntry.Attribute("label").Value;
var mainEntry = new MenuEntry() { Label = xMainEntryLabel, Name = xMainEntryName};
}
但是,我不知道相同类型的childelements的数量,所以我不知道我必须做多少次xMenu.Elements("entry").Elements("entry).Elements("entry")
,我怎么能继续循环这些元素并构建在c#中使用相同数量的级别来构建结构(显然我将需要另外一种方法将对象保存到xml中。但是我想,如果我知道如何以一种方式执行它,我可以做到另一个四处走走