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

标签 c# serialization remoting

从 .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/

相关文章:

c# - 接收 : Wait for first item for a period of time

java - 将java序列化对象反序列化为Scala类

c# - 如何从 [Serializable] INotifyPropertyChanged 实现者中排除不可序列化的观察者?

c# - 使用 .Net 在网络机器上停止进程

c# - 如何将 DateTimePicker 转换为日期以保存到 SQL Server?

c# - 将 png 文件上传到 Azure Blob 存储会失去透明度

c# - 覆盖 ASP.net 中的母版页功能

javascript - 在 json 字符串化数组对象时排除对象属性

perl - 为什么我必须加载 Perl 类才能使用我从 YAML 反序列化的对象?

c# - .NET 远程处理 : How to handle disconnected objects