【发布时间】:2014-10-06 08:36:37
【问题描述】:
我正在开发一个项目,该项目将在 CSV 文件中序列化/存储对象。 (是的,我知道这不是最佳做法,但这是必须的。)
我试图保持我的解决方案干净,所以我在解决方案中有多个项目,其中一个是包含存储/序列化方法的库项目。该项目引用了 CSVhelper,这是我想用来执行 CSV 操作的第 3 方库。
在项目 A 中
foo myobject = new foo(x,y,z);
B.WriteToCsv(myobject);
在项目 B(我的库,引用 csvhelper)中
public static WriteToCsv(foo myobject); // csvhelper would do the work
但是,Csvhelper 需要在我的 foo 对象上设置某些属性才能对其进行操作。
我试图避免在我的 foo 对象类定义文件中应用这些属性,而是更喜欢在项目 B 中动态应用这些属性。
我的问题是,以后是否可以动态应用属性?重点是尽可能保持我的项目干净,但我觉得这会使事情变得更加复杂。这是一个坏主意,还是有针对此问题的通用解决方案?
根据要求更新,例如:
我的 foo 对象定义:
public class Foo
{
public string a;
public string b;
public int c;
}
CsvHelper 需要这样的字段属性:
public class Foo
{
[CsvColumn(Name = "a", FieldIndex = 1)]
public string a;
[CsvColumn(Name = "b", FieldIndex = 2)]
public string b;
[CsvColumn(Name = "c", FieldIndex = 3)]
public int c;
}
为了保持我的代码干净,我想避免在此处添加这些属性,因为我想将所有与存储/序列化相关的代码保留在我的单独库中。 (项目 B)
【问题讨论】:
-
“属性”是指属性,还是 .NET 意义上的属性,例如
[Serializable]?如果你能提供一个简短但完整的例子,那真的很有帮助。 -
@JonSkeet 已更新。我的意思是 .NET 意义上的属性,是的。 [XYZ]
标签: .net attributes projects-and-solutions solution code-cleanup