将字符串(System.String)转换为类型

时间:2012-10-29 16:41:09

标签: c# xml linq

我正在尝试创建一个通用的XML到对象转换器。换句话说,以下是我的XML

<setting>
   <name>testing</name> 
   <type>System.String</type>
   <defaultObj>TTTT</defaultObj>
</setting>

类型字段保存其重新加载的对象的类型。这只是我所选择的对象结构。无论如何,我有转换问题

System.String

进入实际的类型变量。因此,例如,为了转换我有以下代码:

foreach (XNode node in document.Element(root).Nodes())
{
   T variable = new T(); //where T : new()

   foreach (FieldInfo field in fields)
   {
      field.SetValue(variable, Convert.ChangeType(((XElement)node).Element(field.Name).Value, field.FieldType));
   }

   retainedList.Add(variable);
}

以通用方式返回对象。该算法完美运行,直到遇到Type字段。我得到了:

Invalid cast from 'System.String' to 'System.Type'.

运行时错误。据我所知,直接将类型标识符(字符串)直接转换为类型存在问题。我不知道如何解决这个问题,至少在保持通用和清洁方面。有任何想法吗?如果问题有点模糊,我很抱歉,如果你不太明白我会尝试进一步澄清。非常感谢任何帮助!

3 个答案:

答案 0 :(得分:8)

您需要将字符串System.String转换为System.String类型。

您可以使用Type.GetType(string typeName);

执行此操作

例如,下面的type变量的Type对象为System.String

var type = Type.GetType("System.String");

然后,您可以在Type超载的情况下使用Convert.ChangeType

Convert.ChangeType(fieldValue, type);

答案 1 :(得分:4)

查看具有各种重载的Type.GetType,将指定为字符串的地图类型转换为Type个实例。

答案 2 :(得分:-6)

在我看来需要说的是,在开始处理序列化器和反序列化器之前,你应该对C#中的编程更加熟悉。如上所述,使用Type.GetType方法可以解决这个特定的障碍,但是我会指向System.Xml.Serialization命名空间的方向,这样的事情已经解决并准备好以便于使用。