我有这样的事情:
foreach (XAttribute attr in element.Attributes())
{
object value = GetValue(attr.Name.ToString());
Type type = null;
if (value != null)
{
type = value.GetType();
}
SetValue(attr.Name.ToString(), (type)attr.Value);
}
我在这里尝试什么?一些反序列化正在进行中 - 我有一些XML序列化数据,如下所示:
<Item Id="5" Name="Test" Visible="False">....
所有东西都存储在字符串中。现在,根据 Name 属性,我知道我要反序列化的对象和基类(让我们称之为 ItemTemplate )我有 Parse 功能。在这个函数中,我迭代XML属性并绑定设置值(因为我没有公共设置器,我不能使用它们,没有办法使用某种XmlDeserialization)使用以下函数: / p>
public void SetValue(string propertyName, object value)
{
var property = this.GetType().GetProperty(propertyName);
if (property != null)
{
property.SetValue(this, value, null);
}
else
{
throw new Exception("Property name '" + propertyName + "' not found!");
}
}
你可以在这里看到问题。在调用 SetValue 之前,我需要将 attr.Value 强制转换为正确的类型。基于 attr.Name ,我知道我需要哪种属性类型,这就是问题所在 - 我如何将 attr.Value 转换为正确的类型(除了字符串,例如Int,Boolean ...)?当然,第一个代码段中的功能无法正常工作,因为您无法使用变量作为类型。
TL; dr - 我的目标是根据一些反射和属性名称将某些XML属性的值转换为正确的类型。我该怎么办?