如何从CSV值实例化类对象

本文关键字:实例化 对象 CSV | 更新日期: 2023-09-27 18:10:33

嗨,我正在尝试使用c#在Windows 8应用程序中创建一个通用的CSV解析器。我想创建一个解析器,当我传递Type T和字符串CSV和Object时,我应该像这样填充对象:

T obj = ParserCSV<T>(CSVString);

目前我可以在MSDN上找到一个样本链接http://code.msdn.microsoft.com/CSV-Parser-for-WinRT-42e0f4d0

在这里,我们解析csv字符串并获得键值对的集合。但是要转换为对象,我们需要找到特定的键并将其映射到对象。

我怎样才能做到这一点?

如何从CSV值实例化类对象

看一下激活器。调用CreateInstance方法;这将使用与指定参数最匹配的构造函数创建指定类型的实例。在你的情况下使用它的一个例子是

Activator.CreateInstance("myAssemblyName", "myType")

如果你有下面的类

public class Person
{
    private string _name;
    public Person() { }
    public Person(string name)
    {
        this._name = name;
    }
    public string Name
    {
        get { return this._name; }
        set { this._name = value; }
    }
}

您可以使用如下方式创建对象实例:

ObjectHandle handle = Activator.CreateInstance("PersonInfo", "Person");
Person p = (Person) handle.Unwrap();
p.Name = "Samuel";
Console.WriteLine(p);

将打印"Samuel"。在您的例子中,对于每个KeyValuePair,您可以使用上面的实例化相关对象。

我希望这对你有帮助。


编辑。

Dictionary<String, String> someDict = new Dictionary<String, String>();
someDict = GetDictOfKvpFromCsv(); // Get the dictionary from your CSV.
foreach (KeyValuePair<String, String> kvp in someDict)
{
    ObjectHandle handle = Activator.CreateInstance(kvp.Key, kvp.Value);
    ISomeType t = (ISomeType)handle.Unwrap();
    // Do other stuff...
}