对象在Windows XP上不可序列化

时间:2014-11-26 16:45:08

标签: c# .net wcf serialization

我使用C#和WCF创建了客户端和服务。它们完全适用于我可以尝试的所有现代操作系统,包括x86和x64。

现在,在Windows XP上尝试时,它并没有“因为这个错误而工作:

  

键入' System.Threading.Tasks.Task`1 [MyObject []]'无法序列化。   考虑使用DataContractAttribute属性标记它,并且   标记您想要序列化的所有成员   DataMemberAttribute属性

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

[OperationContract()]
List<MyObject> GetFileList(string randomString, string uniqueID);

MyObject看起来像这样

[Serializable()]
public class MyObject
{
    public string oneRandomWorld { get; set; }
    public string helloImAVariable { get; set; }

    public SingleVMFileInfo(string oneRandomWorld, string helloImAVariable)
    {
        this.oneRandomWorld = oneRandomWorld;
        this.helloImAVariable = helloImAVariable;
    }
}

里面只包含字符串。我尝试使用这两种方法扩展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,Server 2008R2,Server 2012,Server 2012 R2 ..但在Windows XP和Windows Server 2003上出现该错误。

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

1 个答案:

答案 0 :(得分:1)

我终于解决了这个问题,编辑了generatedProxy.cs,我使用svcutil.exe创建的那个

对于每个功能,该文件都包含同步异步版本。即使我没有使用任何异步版本,程序仍会尝试初始化它并导致失败。

删除所有aSync版本解决了我的问题。

我仍然无法理解为什么只有Windows XP和Windows Server 2003不喜欢这样,但这就是我的工作方式。

感谢Dead.Rabit的信息,没有它,我无法想象这个问题!

ps:我仍然无法理解为什么我会得到一个downvote ..好吧,我得忍受它! :)