从 .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 string
和 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 查看程序集加载失败.希望对您有所帮助。
关于c# - .Net 2 中的反序列化列表 <> 应该在 .Net 4 中工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7163532/