2013-04-24 39 views
1

嗨我想在Windows 8應用程序中使用C#創建一個通用的CSV解析器。我想創建了當我通過T型和字符串CSV解析器和對象我應該得到的對象填充是這樣的:如何從CSV值實例化類對象?

T obj = ParserCSV<T>(CSVString); 

目前我能得到一個樣本這是有MSDN上的鏈接爲此http://code.msdn.microsoft.com/CSV-Parser-for-WinRT-42e0f4d0

在此我們解析csv字符串並獲取Key Value對的集合。但是,然後要轉換爲對象,我們需要找到特定的鍵並將其映射到對象。

我該如何做到這一點?

+0

您將只能假設CSV值是字符串類型。除非您自己編碼CSV值並針對每種所需類型對這些值進行不同的解析,否則所需的內容是不可能的。使用XML。 – MoonKnight 2013-04-24 07:52:22

+0

我無法將屬性名稱與鍵名映射嗎? – 2013-04-24 08:53:23

+0

我明白你現在在說什麼,對不起。是的,你可以做到這一點。給我一秒鐘我會盡力幫助... – MoonKnight 2013-04-24 08:59:13

回答

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... 
} 
+0

謝謝它真的有幫助。但是,我可以使用屬性Name並將其作爲字符串傳遞給KeyValue Pair並獲取它的值嗎? – 2013-04-24 10:36:28

+0

是的。但是你沒有展示這個'Key Value pair'是什麼。這是一個'KeyValuePair '或什麼?請記得注意是否有用,並且如果答案是答案,則標記爲答案... – MoonKnight 2013-04-24 10:48:05

+0

是它的KeyValuePair <字符串,字符串>對。 – 2013-04-24 11:14:23