C# System.InvalidCastException:无法强制转换类型为';System.Xml.Xml文档

C# System.InvalidCastException:无法强制转换类型为';System.Xml.Xml文档,c#,.net,visual-studio-2010,.net-4.0,C#,.net,Visual Studio 2010,.net 4.0,我遇到了一些像 tmo=(testobjectt)值[i];这是“无法将'System.Xml.XmlNode[]类型的对象强制转换为System.type类型” 对这个问题有什么想法吗?唯一可用的解决方案是重新启动windows服务,以便UI中的所有内容都可用。另一件事是我们在客户端和服务器之间有API 这是我正在使用的代码段: public class Testarray: ArrayList // Release resources if (rd != null)

我遇到了一些像 tmo=(testobjectt)值[i];这是“无法将'System.Xml.XmlNode[]类型的对象强制转换为System.type类型”

对这个问题有什么想法吗?唯一可用的解决方案是重新启动windows服务,以便UI中的所有内容都可用。另一件事是我们在客户端和服务器之间有API

这是我正在使用的代码段:

public class Testarray: ArrayList

     // Release resources
     if (rd != null)
     {
        rd.Close();
     }

     return retval;
  }


Assembly a = Assembly.GetAssembly(typeof(Testobject));
                  string myType = a.gettype;
                  string xml = xmlvalue;
DataModelObject dmo;
// Deserialize and process the object
                  Testarraycol = Testarray.Deserialize(xml, Type.type);
tmo= (Testobject)value[i];  // this is where the exception occurs
更新
是否需要任何无参数construcotr?在任何地方,我正在手动检查整个项目在序列化时丢失的任何地方?

我对此错误原因的最佳猜测是,您依赖于
列中反序列化对象的顺序。这不是保证

在一个简单的表示中,您的
ObjectArray.Deserialize
方法可能如下所示:

public static ObjectArray Deserialize(string xml, Type type)
{
    var s = new XmlSerializer(typeof(ObjectArray),
        new Type[] { type });
    var o = (ObjectArray)s.Deserialize(new StringReader(xml));
    return o;
}
ObjectArray col = ObjectArray.Deserialize(xml, 
    new Type[] { typeof(DataModelObject), typeof(ViewObjectInfo) }
    );
dmo = (DataModelObject)col.OfType<DataModelObject>().Skip(i).First();
但这意味着序列化的
xml
中的任何其他对象,如果不是
类型
类型
(方法的参数),将被反序列化到
System.xml.XmlNode[]

col[i]
实际持有
ViewObjectInfo
时,可能会发生错误

如果要确保两种类型都正确反序列化,请使用类似于以下内容的方法:

public static ObjectArray Deserialize(string xml, Type[] types)
{
    var s = new XmlSerializer(typeof(ObjectArray), types);
    var o = (ObjectArray)s.Deserialize(new StringReader(xml));
    return o;
}
这样称呼它:

public static ObjectArray Deserialize(string xml, Type type)
{
    var s = new XmlSerializer(typeof(ObjectArray),
        new Type[] { type });
    var o = (ObjectArray)s.Deserialize(new StringReader(xml));
    return o;
}
ObjectArray col = ObjectArray.Deserialize(xml, 
    new Type[] { typeof(DataModelObject), typeof(ViewObjectInfo) }
    );
dmo = (DataModelObject)col.OfType<DataModelObject>().Skip(i).First();

dmo=(DataModelObject)col.OfType().Skip(i).First();

不要忘记,
col[i]
不保证与数组项的原始顺序相匹配。

对于此错误的原因,我的最佳猜测是您依赖于
col
ObjectArray
中反序列化对象的顺序。这不是保证

在一个简单的表示中,您的
ObjectArray.Deserialize
方法可能如下所示:

public static ObjectArray Deserialize(string xml, Type type)
{
    var s = new XmlSerializer(typeof(ObjectArray),
        new Type[] { type });
    var o = (ObjectArray)s.Deserialize(new StringReader(xml));
    return o;
}
ObjectArray col = ObjectArray.Deserialize(xml, 
    new Type[] { typeof(DataModelObject), typeof(ViewObjectInfo) }
    );
dmo = (DataModelObject)col.OfType<DataModelObject>().Skip(i).First();
但这意味着序列化的
xml
中的任何其他对象,如果不是
类型
类型(方法的参数),将被反序列化到
System.xml.XmlNode[]

col[i]
实际持有
ViewObjectInfo
时,可能会发生错误

如果要确保两种类型都正确反序列化,请使用类似于以下内容的方法:

public static ObjectArray Deserialize(string xml, Type[] types)
{
    var s = new XmlSerializer(typeof(ObjectArray), types);
    var o = (ObjectArray)s.Deserialize(new StringReader(xml));
    return o;
}
这样称呼它:

public static ObjectArray Deserialize(string xml, Type type)
{
    var s = new XmlSerializer(typeof(ObjectArray),
        new Type[] { type });
    var o = (ObjectArray)s.Deserialize(new StringReader(xml));
    return o;
}
ObjectArray col = ObjectArray.Deserialize(xml, 
    new Type[] { typeof(DataModelObject), typeof(ViewObjectInfo) }
    );
dmo = (DataModelObject)col.OfType<DataModelObject>().Skip(i).First();

dmo=(DataModelObject)col.OfType().Skip(i).First();

别忘了,
col[i]
不能保证与数组项的原始顺序相匹配。

你能发布
ObjectArray.Deserialize
方法吗?@Alex Filipovici我用反序列化方法编辑了我的问题为什么你要使用
ArrayList
XmlTextReader
?自从.NET2.0以来,它们都被弃用了@约翰·桑德斯:你是在谈论这里将面临的任何绩效问题,还是只是一些升级级别的变化?在这里,使用
XmlReader.Create()
而不是
new XmlTextReader()
,哪种方法是最好的选择,使用
List
而不是
ArrayList
。你能发布
ObjectArray.Deserialize
方法吗?@Alex Filipovici我用反序列化方法编辑了我的问题为什么你要使用
ArrayList
XmlTextReader
?自从.NET2.0以来,它们都被弃用了@约翰·桑德斯:你是在谈论这里将面临的任何绩效问题,还是只是一些升级级别的变化?使用
XmlReader.Create()
而不是
new XmlTextReader()
,使用
List
而不是
ArrayList
,这是最好的选择。您是否检查了此集合中是否有任何项目
col.OfType()
?也许你应该考虑改写你的代码>反序列化< /COD>方法。我甚至使用FieldStRebug()而不是FrStter(),然后得到“DMO”作为Null,你也可以发布一个XML样本吗?复制这个问题是非常困难的,我需要把我的系统放在待机模式,等待一天,然后开始,这些天我有很多工作,我在WordPress XML之后,它不会产生任何差别:(你检查过这个集合中是否有任何条目<代码> Cype of Type()/<代码>?也许你应该考虑改写你的<代码>反序列化< /Cord>方法。我甚至使用FrestDebug()而不是FiStter(),然后得到“DMO”。你也可以发布一个XML示例吗?复制这个问题非常困难,我需要将我的系统置于待机模式,等待一天,然后开始,这些天我做了很多工作,一旦XML出现,我会发布它。不,很可能这不会有任何区别:(