C# WCF序列化类型不匹配

C# WCF序列化类型不匹配,c#,wcf,serialization,C#,Wcf,Serialization,我有一个对象,让我们称之为非序列化对象,我不能更改它,我需要序列化它。因此,我创建了自己的对象SerializableObject,它是可序列化的,包含与原始对象相同的所有数据。看起来是这样的: namespace test [Serializable] class SerializableObject { private int item1; public int Item1 { get; set;

我有一个对象,让我们称之为非序列化对象,我不能更改它,我需要序列化它。因此,我创建了自己的对象SerializableObject,它是可序列化的,包含与原始对象相同的所有数据。看起来是这样的:

namespace test  
[Serializable]  
class SerializableObject  
{  
    private int item1;  
    public int Item1  
    {  
        get;  
        set;  
    }  
    public SerializableObject()  
    {}  
}  
然后,我创建了另一个类,该类在SerializableObject和UnSerializableObject之间进行转换。 在服务方面,一切正常。服务中的方法将SerializableObject作为参数,我将其转换为非序列化对象。问题出在客户端。我使用svcutil创建客户机代码。然后我获取一个对象,将其转换为SerializableObject,并在服务调用中使用SerializableObject。像这样:

  TTSServiceClient aClient = new TTSServiceClient(); 
        UnSerializableObject loMMessage = new MostMessage();
        SerializableObject loSMMessage = ObjectConverter.ToSerializableObject(loMMessage);
        aClient.Allocate_OnStartResultAck(loSMMessage);
当我编译客户端时,会出现以下错误:

错误59参数“1”:无法从“test.Utilities.SerializableObject[c:\Projects\Client\Client\test.Utilities.dll]”转换为“test.Utilities.SerializableObject[c:\Projects\Client\Client\Service.cs(19)]”


为什么会这样?我该如何修复它?是否有更好的方法来处理此问题?

请确保客户端和服务器都引用了包含SerializableObject类定义的公共项目。此外,请按以下方式标记您的班级:

[Serializable]  
[DataContract()]
class SerializableObject  
{  
    [DataMember()]
    public int Item1  
    {  
        get;  
        set;  
    }  

    public SerializableObject()  
    {}  
}  

添加服务引用时,默认情况下,它会在服务引用的命名空间中创建具有相同结构的新对象。若您想要使用共享转换器,那个么您也必须共享对象,并在服务引用期间重用它


顺便说一句,WCF支持包装不可序列化对象的基础结构。检查

我必须在客户端重写转换方法,并删除对test.utilities.dll的引用。所以本质上

TTSServiceClient aClient = new TTSServiceClient(); 
UnSerializableObject loMMessage = new MostMessage();
SerializableObject loSMMessage = ObjectConverter.ToSerializableObject(loMMessage);
aClient.Allocate_OnStartResultAck(loSMMessage);
变成

TTSServiceClient aClient = new TTSServiceClient(); 
UnSerializableObject loMMessage = new MostMessage();
SerializableObject loSMMessage = new SerializableObject();
loSMMessage.Item1 = loMMessage.Item1;
aClient.Allocate_OnStartResultAck(loSMMessage);

这有点烦人,但很有效。

你能发布ObjectConverter.ToSerializableObject方法的原型吗?我已经添加了它。这里有更多的房产,但基本上就是这样。那没用。我现在得到了我想要的数据,这很有帮助。但我还是遇到了同样的错误。你能提供更多关于共享转换器的信息吗?或者指向参考资料获取更多信息吗?我找不到。提前谢谢。
TTSServiceClient aClient = new TTSServiceClient(); 
UnSerializableObject loMMessage = new MostMessage();
SerializableObject loSMMessage = new SerializableObject();
loSMMessage.Item1 = loMMessage.Item1;
aClient.Allocate_OnStartResultAck(loSMMessage);