将字符串解析为对象的属性

本文关键字:对象 属性 字符串 | 更新日期: 2023-09-27 18:17:28

我在SQL Server中有一个数据库表,我需要配置一个。net应用程序来使用该表中的一些数据,这些数据将在SOAP API调用中使用。

例如,表中有以下列

FirstName | LastName | EmailAddress

这些列中的值需要映射到API调用中的某些字段。这个配置必须是灵活的,所以我不能只将FirstName分配给apiobject。例如,名字。

是否有一种方法来派生一个字符串的对象的属性?

例如,对于FirstName,是否可以将其解析为object。Firstname = value,但不像这样

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

我更愿意这样写

ApiObject.[somehow-resolve-which-field] = columnValue
有谁知道我在说什么吗?

将字符串解析为对象的属性

如果你没有这个类的符号,你只是想创建一个具有所需属性的对象-正确的方法是使用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来自您的示例。注意,column应该是string类型,columnValue应该匹配属性的类型。

如果我理解正确的话,你需要一个对象,你不知道它有多少属性,这些属性是什么。对于这种情况,c#中有dynamic关键字。你可以将ApiObject初始化为dynamic

dynamic ApiObject = new ExpandoObject();

,则可以设置该对象的属性如下:

ApiObject.YourProperty=columnValue;

更多细节:关于ExpandoObject


如果您想知道这是哪个列,可以使用ColumnName/DataTable/System.Data命名空间。在c#中获取表列有一些问题。其中之一是:我如何得到列名打印在这个c#程序?