2016-11-11 84 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,我更新了我的答案。请检查一下 –