C# 对象在Windows XP上不可序列化

C# 对象在Windows XP上不可序列化,c#,.net,wcf,serialization,C#,.net,Wcf,Serialization,我使用C#和WCF创建了一个客户端和一个服务。它们在我可以尝试的所有现代操作系统上都能完美工作,包括x86和x64 现在,在Windows XP上尝试时,由于以下错误,它无法工作: 无法序列化类型“System.Threading.Tasks.Task”任务“1[MyObject[]”。 考虑使用DATACONTractAttor属性标记它,以及 标记要序列化的所有成员 DataMemberAttribute属性 在我的服务界面上,我使用了这个 [OperationContract()] Lis

我使用C#和WCF创建了一个客户端和一个服务。它们在我可以尝试的所有现代操作系统上都能完美工作,包括x86和x64

现在,在Windows XP上尝试时,由于以下错误,它无法工作:

无法序列化类型“System.Threading.Tasks.Task”任务“1[MyObject[]”。 考虑使用DATACONTractAttor属性标记它,以及 标记要序列化的所有成员 DataMemberAttribute属性

在我的服务界面上,我使用了这个

[OperationContract()]
List<MyObject> GetFileList(string randomString, string uniqueID);
里面只包含字符串。我试图用这两种方法扩展MyObject

//Deserializer
public MyObject(SerializationInfo info, StreamingContext ctxt)
{
    oneRandomWorld = (string)info.GetValue("oneRandomWorld", typeof(string));
    helloImAVariable = (string)info.GetValue("helloImAVariable", typeof(string));
}

//Serializer
public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
{
    info.AddValue("oneRandomWorld", oneRandomWorld);
    info.AddValue("helloImAVariable", helloImAVariable);
}
没有任何不同的结果。 这适用于Windows 7、8、8.1、服务器2008R2、服务器2012、服务器2012 R2。。但是在WindowsXP和WindowsServer2003上给出这个错误


我有点缺乏想法,我能试试什么

我最终通过编辑我的
generatedProxy.cs
解决了这个问题,这是我用
svcutil.exe创建的

该文件包括每个函数的syncasync版本。即使我从来没有使用过任何异步版本,程序仍然尝试初始化它,结果失败

删除所有异步版本解决了我的问题

我仍然不明白为什么只有WindowsXP和WindowsServer2003不喜欢这样,但这就是我使它工作的方式

谢谢你死了。拉比特提供的信息,没有它,我无法想象会有什么问题


附言:我还是不明白为什么我投了反对票。。好吧,我得接受它!:)

你有没有任何理论来解释为什么它试图序列化一个
系统。线程。任务。任务
,而不仅仅是一个
MyObject
——否则你可以包括执行序列化的代码吗。序列化
任务
总是会失败,因为它包含一个
异常
,而该异常又包含一个不可序列化的
字典。谢谢,我正在试图找出原因。。顺便说一句,我想知道为什么做这件事的人投了反对票:)你能包含序列化你的对象的代码吗。我们很有可能在那里找到问题所在。
//Deserializer
public MyObject(SerializationInfo info, StreamingContext ctxt)
{
    oneRandomWorld = (string)info.GetValue("oneRandomWorld", typeof(string));
    helloImAVariable = (string)info.GetValue("helloImAVariable", typeof(string));
}

//Serializer
public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
{
    info.AddValue("oneRandomWorld", oneRandomWorld);
    info.AddValue("helloImAVariable", helloImAVariable);
}