[英]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.