簡體   English   中英

WCF序列化類型不匹配

[英]WCF Serialization Type mismatch

我有一個對象,讓我們稱它為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;
   }
}

為什么會這樣呢? 以及如何解決? 有沒有更好的方法來解決這個問題?

我必須在客戶端重寫我的轉換方法,並刪除對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);

這有點煩人,但可以。

請確保您的客戶端和服務器都引用公共項目,該項目包含SerializableObject類的定義。 此外,將您的課程標記為以下內容:

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

    public SerializableObject()  
    {}  
}  

添加服務引用時,默認情況下,它會在服務引用的名稱空間中創建具有相同結構的新對象。 如果要使用共享轉換器,則還必須共享對象並在服務引用期間重用它。

順便說一句。 WCF支持用於包裝不可序列化對象的基礎結構。 檢查IDataContractSuroggate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM