目录路径:从静态字符串到动态OO路径

时间:2015-10-18 10:47:02

标签: c#

我通过装饰XmlSerializer来消磨时间,我遇到了路上的撞击声。

当我指定要反序列化的文件路径时,我目前正在分配一个类似于以下内容的字符串:

XmlHandler handler = new XmlHandler();
Car newCar = handler.GetSingle<Car>("Vehicles\\Cars\\Car1.xml");

我认为如果我可以通过对象分配此路径(可能在运行时动态创建和填充),那将是一个很好的:

public class FolderFileModel 
{
    public string FolderFileName { get; set;}
    public string FullPath { get; set;}
    public string FileType { get; set;}
    ...

    public override string ToString()
    {
        return FullPath;
    }
}

public static class Vehicles : FolderFileModel
{
    public static Cars Cars { get; set; }
    public static Trucks Trucks { get; set; }
    public static Motorcycle Motorcycle { get; set; }
}

public static class Cars : FolderFileModel 
{
    public static Car Car1 { get; set;}
    public static Car Car2 { get; set;}
}

public static class Car : FolderFileModel 
{
}

然后像这样调用它:

Car newCar = handler.GetSingle<Car>(Vehicles.Cars.Car1);

使用正确的值分配对象运行时不是问题,问题是我显然需要在编译时分配数据。 (硬编码不是一个选项,但我对其他如何实现这一点的想法持开放态度)

到目前为止我所考虑的事项:

  1. ExpandoObject - 在这种情况下无法工作,因为我必须存储路径数据才能使用它编译时。
  2. Reflection.Emit - 我担心这种方法不会非常优化,最终会使装饰者类太慢。
  3. 使用T4模板将XML转换为.cs - 最后,我考虑在XML文件中动态映射目录层次结构,并从中生成类。
  4. 之前我从未使用过T4模板,所以我想我是否可以解决这个问题的简单解决方案(除了对目录层次结构进行硬编码) 因为它似乎相当多的工作,在我的项目中可能不值得麻烦。

0 个答案:

没有答案