我正在尝试创建一个通用的XML到对象转换器.换句话说,以下是我的XML
<setting>
<name>testing</name>
<type>System.String</type>
<defaultObj>TTTT</defaultObj>
</setting>
Run Code Online (Sandbox Code Playgroud)
type字段保存其加载的对象的类型.这只是我所选择的对象结构.无论如何,我遇到了转换问题
System.String
Run Code Online (Sandbox Code Playgroud)
到一个实际的类型变量.所以,例如,为了转换我有以下代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
以通用方式获取对象.该算法完美运行,直到遇到Type字段.我得到一个:
Invalid cast from 'System.String' to 'System.Type'.
Run Code Online (Sandbox Code Playgroud)
运行时错误.据我所知,直接将类型标识符(字符串)直接转换为类型存在问题.我不知道如何解决这个问题,至少在保持通用和清洁方面.有任何想法吗?如果问题有点模糊,我很抱歉,如果你不太明白我会尝试进一步澄清.任何帮助是极大的赞赏!
您需要将字符串System.String转换为类型System.String.
你可以这样做 Type.GetType(string typeName);
例如,type下面的变量将具有Type对象System.String.
var type = Type.GetType("System.String");
Run Code Online (Sandbox Code Playgroud)
然后,您可以Type在Convert.ChangeType正在使用的重载中使用它.
Convert.ChangeType(fieldValue, type);
Run Code Online (Sandbox Code Playgroud)