c# – 应该从.Net 2反序列化列表<>在.Net 4中工作吗?

从.Net 4应用程序到.Net 2应用程序进行远程调用时出现以下错误.

Unable to load type
System.Collections.Generic.List`1[[MyNamespace.MyClass,
MyAssembly, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null]] required for deserialization.

有谁知道这是否可能是因为List< T> .Net 2和.Net 4有什么不同?

此外,MyClass有3个字符串和3个DateTime属性,并标记为[Serializable]但不实现ISerializable

这是堆栈跟踪:

Server stack trace:
at System.Runtime.Serialization.ObjectManager.CompleteObject(ObjectHolder holder, Boolean bObjectFullyComplete)
at System.Runtime.Serialization.ObjectManager.DoNewlyRegisteredObjectFixups(ObjectHolder holder)
at System.Runtime.Serialization.ObjectManager.RegisterObject(Object obj, Int64 objectID, SerializationInfo info, Int64 idOfContainingObj, MemberInfo member, Int32[] arrayIndex)
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.RegisterObject(Object obj, ParseRecord pr, ParseRecord objectPr, Boolean bIsString)
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseObjectEnd(ParseRecord pr)
at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, IMethodCallMessage methodCallMessage)
at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg) Exception rethrown
at [0]:
at System.Activities.Statements.Throw.Execute(CodeActivityContext context)
at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager)
at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)

解决方法:

似乎问题是加载你的类型:

MyNamespace.MyClass, MyAssembly

.NET框架需要在List< T>中加载类型T.能够序列化列表.所以问题是您的程序集或您的类型未在另一个对等方中正确加载.

您应该进行工作以了解抛出错误的计算机无法加载包含MyNamespace.MyClass,MyAssembly类型的程序集的原因

另外,请确保MyNamespace.MyClass类型,MyAssembly具有相同的版本号.

您可以使用Fusion Log tool查看装配负载故障.希望它有所帮助.

上一篇:Cloud computing Developers Conference


下一篇:如何将服务“绑定”到.NET Remoting服务器中的特定通道(tcp,http,ipc)?