转换为存储在变量

时间:2016-06-25 12:42:55

标签: c# .net xml serialization deserialization

我有这样的事情:

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属性的值转换为正确的类型。我该怎么办?

0 个答案:

没有答案