我正在尝试根据EDMS的文件夹结构构建一个类型。我需要查询的tbl是结构为 的ParentId childID的
所以我不知道每个文件夹结构都有很多级别。
所以我的问题是,如果我创建一个类/类型,我该怎么做。我有这个
using System;
using System.Xml.Serialization;
using System.Collections.Generic;
namespace DocumentMigrator
{
[XmlRoot(ElementName = "DocuShareFolders")]
class objFolderStructure
{
[XmlElement(ElementName = "RootElement")]
public RootElement RootElement { get; set; }
}
[XmlRoot(ElementName = "RootElement")]
public class RootElement
{
[XmlElement(ElementName = "iRootElementId")]
public string IRootElementId { get; set; }
[XmlElement(ElementName = "sRootElementName")]
public string SRootElementName { get; set; }
[XmlElement(ElementName = "sRootElementDescription")]
public string SRootElementDescription { get; set; }
[XmlElement(ElementName = "Folder")]
public Folder Folder { get; set; }
}
[XmlRoot(ElementName = "Folder")]
public class Folder
{
[XmlElement(ElementName = "iFolderId")]
public string IFolderId { get; set; }
[XmlElement(ElementName = "sFolderDescription")]
public string SFolderDescription { get; set; }
[XmlElement(ElementName = "sFolderName")]
public string SFolderName { get; set; }
}
}
我的问题是如何处理文件夹和文件中的子文件夹,这些文件夹可能处于任何级别?
提前谢谢
答案 0 :(得分:0)
要获取包含多个子文件夹的文件夹,这就是您想要的。
[XmlArrayItem(ElementName = "Folder")]
public List<Folder> ChildFolders { get; set; }
您需要做的就是使用所有子文件夹填充“文件夹”列表。
您可能还想从此
更改根元素[XmlRoot(ElementName = "RootElement")]
public class RootElement
{
[XmlElement(ElementName = "iRootElementId")]
public string IRootElementId { get; set; }
[XmlElement(ElementName = "sRootElementName")]
public string SRootElementName { get; set; }
[XmlElement(ElementName = "sRootElementDescription")]
public string SRootElementDescription { get; set; }
[XmlElement(ElementName = "Folder")]
public Folder Folder { get; set; }
}
到这个
[XmlRoot(ElementName = "RootElement")]
public class RootElement
{
[XmlElement(ElementName = "iRootElementId")]
public string IRootElementId { get; set; }
[XmlElement(ElementName = "sRootElementName")]
public string SRootElementName { get; set; }
[XmlElement(ElementName = "sRootElementDescription")]
public string SRootElementDescription { get; set; }
[XmlArrayItem(ElementName = "Folder")]
public List<Folder> Folders { get; set; }
}
这样根元素可以有多个兄弟文件夹
您可以在控制台应用程序中尝试这段代码来测试它
objFolderStructure structure = new objFolderStructure();
structure.RootElement = new RootElement();
structure.RootElement.Folders = new List<Folder>()
{
new Folder()
{
ChildFolders = new List<Folder>()
{
new Folder() { SFolderName = "blah" }
},
SFolderName = "some folder"
},
new Folder()
{
ChildFolders = new List<Folder>()
{
new Folder() { SFolderName = "blah 2" },
new Folder() { SFolderName = "blah 2 2" },
new Folder() { SFolderName = "blah 3" }
},
SFolderName = "some folder 2"
}
};
new XmlSerializer(typeof(objFolderStructure)).Serialize(Console.Out, structure);
你应该在根级别有2个文件夹,第1个文件夹有1个子文件夹,第2个文件夹有3个子文件夹。
答案 1 :(得分:0)
这不是一个完整的复制/粘贴答案,但旨在显示您正在寻找的构造。我从包含simulair嵌套文件夹构思的google Kml格式的包装器中复制/编辑了这个。文件夹可以(以及其他)包含(子)文件夹或地标(地图上的点)。
要查看的特定构造是在文件和文件夹(AbstractItem)之间使用共享基类并结合使用XmlElement属性。
请注意,在生成的Xml中,您将从XmlElement(“文件”和“文件夹”)标记中找到指定的名称,而不是“项目”
public class Folder : AbstractItem
{
[XmlElement("File", Type = typeof(File))]
[XmlElement("Folder", Type = typeof(Folder))]
public List<AbstractItem> Items { get; set; }
}
public class File : AbstractItem
{
// Empty
}
public abstract class AbstractItem {
[XmlElement("name")]
public string Name { get; set; }
}