那位高手可以解决嘛?动态加载的纯数据自定义类,实例对象XML序列化出错
动态加载的纯数据自定义类,通过反射获取的类型,createinstance创建的实例,向消息队列作XML序列化时,报生成XML文档出错,innerexception为不能将类型“XXX”强制转换为“XXX”类型。可是看到的两个"XXX"完全相同。请高手指点!!! --------------------编程问答-------------------- 没看明白,帮顶 --------------------编程问答-------------------- Assembly
Type
Object
--------------------编程问答-------------------- theType = EventAssembly->GetType("XXX");
Object* theObject = Activator::CreateInstance(theType);
myQueue.Send(theObject, label);
=====================================================================
InnerException.Message:无法将类型为“A.B.B.XXX”的对象强制转换为类型“A.B.C.XXX”。
StackTrace= 在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXXX.Write3_XXX(Object o)
======================================================================
捕捉到 System.InvalidOperationException
Message="生成 XML 文档时出错。"
Source="System.Xml"
StackTrace:
在 System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
在 System.Xml.Serialization.XmlSerializer.Serialize(Stream stream, Object o)
在 System.Messaging.XmlMessageFormatter.Write(Message message, Object obj)
在 System.Messaging.Message.AdjustToSend()
在 System.Messaging.MessageQueue.SendInternal(Object obj, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)
在 System.Messaging.MessageQueue.Send(Object obj, String label, MessageQueueTransaction transaction, MessageQueueTransactionType transactionType)
在 System.Messaging.MessageQueue.Send(Object obj, String label)
--------------------编程问答-------------------- 两个类的命名空间不一样 --------------------编程问答-------------------- 不是一个类型啊. --------------------编程问答-------------------- 修正:
InnerException.Message:无法将类型为“A.B.XXX”的对象强制转换为类型“A.B.XXX”。 --------------------编程问答-------------------- 结帐了吧.. 拖的太久了...饿.. --------------------编程问答-------------------- 而且你提供的数据实在少.. --------------------编程问答-------------------- more details info? --------------------编程问答-------------------- 代码如下:
1:Assembly* EventAssembly=Assembly::Loadfrom("mytype.dll");
2:String* EventNameSpace = EventAssembly->GetTypes()[0]->Namespace;
3:Type* theType = EventAssembly->GetType(String::Concat(EventNameSpace, ".", EventNo));
4:Object* theObject = Activator::CreateInstance(theType);
5:。。。。。本行通过反射获取theObject 字段并对theObject 赋值;
6:myQueue.Send(theObject, label);------------>产生例外
错误信息:
InnerException.Message:无法将类型为“A.B.XXX”的对象强制转换为类型“A.B.XXX”。 --------------------编程问答-------------------- jf up 学习 --------------------编程问答-------------------- 没看太明白,提2点:
1。使用泛型避免强制转换问题。
2。有人提到了命名空间,同意。
另外还说一点,指针问题,因为前面看有人用到了,这是C里头的东西。在C#中我们利用的是对象的原理,把指针改头换面了的东西。不建议使用。 --------------------编程问答-------------------- 谢谢parse建议,我用的C --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 是.net 2.0 么?
是的话好像打两个补丁就好了,
以前我碰到过. --------------------编程问答-------------------- 帮顶~ --------------------编程问答-------------------- 16楼的朋友,请问是什么时候的补丁?在哪里呢?
补充:.NET技术 , .NET Framework