如何从CSV值实例化类对象?

时间:2013-04-24 07:50:08

标签: c# parsing csv windows-8 windows-runtime

您好我正在尝试使用C#在Windows 8 App中创建一般的CSV解析器。我想创建一个解析器,当我传递Type T和字符串CSV和Object时,我应该得到这样的对象:

T obj = ParserCSV<T>(CSVString);

目前,我可以在MSDN链接上获取该http://code.msdn.microsoft.com/CSV-Parser-for-WinRT-42e0f4d0

的样本

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

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

查看Activator.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);

将打印“塞缪尔”。在您的情况下,对于每个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...
}