2016-11-11 43 views
1

我在SQL Server中有一個數據庫表,我需要配置一個.NET應用程序以使用此表中的一些數據,此數據用於SOAP API調用。將字符串解析爲對象的屬性

例如,表中有這些列

名字|姓氏|電子郵件地址

這些列中的值需要映射到API調用中的某些字段。這個配置必須靈活,所以我不能只將FirstName分配給apiobject.firstname。

有沒有辦法將一個字符串派生到一個對象的屬性?

例如,對於名字,纔有可能將它解析爲object.Firstname =價值,但不能做這樣的

if(column == "FirstName") 
{ 
    ApiObject.FirstName = columnValue 
} 

而是我想要做像

ApiObject.[somehow-resolve-which-field] = columnValue 

有人知道我在做什麼嗎?

+1

您可以使用'dynamic'屬性來爲此 –

回答

2

如果你沒有這個類的符號,你就是想用所需的屬性創建一個對象 - 正確的方法是使用dynamic,因爲它在其他的答案指出。

如果你已經有了類,例如:

public class MyClass 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string EmailAddress { get; set; } 
} 

你可以做你希望與什麼reflection如下:

var myObject = new MyClass(); 
var prop = myObject.GetType().GetProperty(column); 
prop.SetValue(myObject, columnValue); 

columncolumnValue是從你的榜樣。請注意0​​應該是string類型,而columnValue應該與屬性的類型匹配。

0

如果我正確理解你需要一個對象,你不知道有多少屬性有它,這些屬性是什麼。對於這種情況,c#中有dynamic關鍵字。您可以初始化​​作爲dynamic

dynamic ApiObject = new ExpandoObject(); 

,那麼你可以設置此對象的屬性如下:如果你想知道About ExpandoObject

UPDATE

ApiObject.YourProperty=columnValue; 

更多細節哪一列是這個,有 DataTableSystem.Data namespa CE。在c#中獲取表格的列有一些問題。其中之一是: How do I get column names to print in this C# program?

+0

正確,但我的問題是如何知道要設置哪個屬性? – andrewb

+0

@andrewb,我更新了我的答案。請檢查一下 –