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

namespace test
[Serializable]
class SerializableObject
{
    private int item1;
    public int Item1
    {
        get;
        set;
    }
    public SerializableObject()
    {}
}


然后,我创建了另一个类,该类在SerializableObject和UnSerializableObject之间进行转换。
在服务方面,一切正常。服务中的方法将SerializableObject作为参数,然后将其转换为UnSerializableObject。问题出在客户端。我使用svcutil创建客户端代码。然后,我将一个Object转换为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)]'

static Class ObjectConverter
{
   static public SerializableObject ToSerializableObject(UnSerializableObject usObject)
   {
        SerializableObject sObject = new SerializableObject();
        sObject.Item1 = usObject.Item1;
        return sObject;
   }
}


为什么会这样呢?以及如何解决?有没有更好的方法来解决这个问题?

最佳答案

添加服务引用时,默认情况下,它将在服务引用的名称空间中创建具有相同结构的新对象。如果要使用共享转换器,则还必须共享对象并在服务引用期间重用它。

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

10-07 15:45