将字符串解析为对象的属性
本文关键字:对象 属性 字符串 | 更新日期: 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);
其中column
和columnValue
来自您的示例。注意,column
应该是string
类型,columnValue
应该匹配属性的类型。
如果我理解正确的话,你需要一个对象,你不知道它有多少属性,这些属性是什么。对于这种情况,c#
中有dynamic
关键字。你可以将ApiObject
初始化为dynamic
dynamic ApiObject = new ExpandoObject();
,则可以设置该对象的属性如下:
ApiObject.YourProperty=columnValue;
更多细节:关于ExpandoObject
如果您想知道这是哪个列,可以使用ColumnName
/DataTable
/System.Data
命名空间。在c#
中获取表列有一些问题。其中之一是:我如何得到列名打印在这个c#程序?