首先,我希望我提供足夠的信息來弄清楚事情,如果不是請多詢問一下。WCF反序列化沒有已知類型
我有一個工作WCF通信使用雙工信道和OneWay方法調用。 ServiceHost位於使用NetPipeBinding的託管WPF應用程序中,客戶端位於該應用程序內的AppDomain中。只要所有類型都是原始類型(字符串,DateTime,...)或指定爲已知類型(List<object>
,List<string>
),一切都按預期工作。但我需要發送其他類型,爲此我不能添加已知的類型屬性,因爲在編譯時我不知道它們。
正如我在這裏閱讀(http://msdn.microsoft.com/library/ms731923(v=vs.100).aspx)所有具有公共屬性的公共類型都受支持,所以用SerializableAttribute裝飾的類型也是如此。
我試圖傳遞一個非常簡單的類:
public class ADT
{
public string Name { get; set; }
}
和作爲第二嘗試
[Serializable]
public class SerializableADT
{
public string Name { get; set; }
}
和Herdo
[DataContract]
public class DataContractADT
{
[DataMember]
public string Name { get; set; }
[DataMember]
public object Value { get; set; }
}
的建議,但反序列化的所有失敗三種類型。
嘗試序列化參數 _http://tempuri.org/:returnValue時發生錯誤。 InnerException消息是'類型 'TestLibraries.SeriablizableADT',數據協定名稱爲 'SeriablizableADT:_http://schemas.datacontract.org/2004/07/TestLibraries' 不是預期的。考慮使用DataContractResolver或將任何未知的 類型靜態添加到已知類型的列表中 - 例如,使用KnownTypeAttribute屬性的 或將其添加到傳遞給DataContractSerializer的已知類型的 列表中。有關更多詳細信息,請參閱 InnerException。
如何在沒有任何編譯時間變化的情況下編組符合MSDN規則的任何類型(例如用Serializable修飾)?
您是否嘗試過'SerializeableADT'的'DataContract'屬性? – Herdo
是的,我做了 - 但我得到了同樣的錯誤。我讀過Serializable和DataContract行爲相同,只要使用默認的DataContractSerializer。我正在嘗試DataContractResolver方法(來自異常消息) - 但仍然沒有運氣。 – thomek