我有一個簡單的數據契約:WCF DataContract - 治療派生類的基類序列
[DataContract]
public class MyData
{
[DataMember]
public string AwesomeData { get; set; }
}
和服務合同:
[ServiceContract]
public interface IMyDataService
{
[OperationContract]
MyData GetAwesomeData();
}
在服務器端組件,我創建派生類做處理:
public class MyDataWithInnerds: MyData
{
public MyDataWithInnerds(object intializationStuff)
{
AwesomeData = Hypermaxulate(initializationStuff);
}
}
和服務實現:
public class MyDataService: IMyDataService
{
public MyData GetAwesomeData()
{
return new MyDataWithInnerds(HupnerRayvakManager.GetInitializationStuff());
}
}
MyDataWithInnerds只是純數據協定MyData的功能實現。
是否有沒有裝飾MyData和引用MyDataWithInnerds告訴序列化器將MyDataWithInnerds序列化爲MyData?帶有MyData的程序集也提供給客戶端。我不希望只引用服務器端MyDataWithInnerds。
我不需要將它反序列化爲MyDataWithInnerds。我猜想我需要將MyDataWithInnerds實例克隆到MyData實例,以便它沒有任何與MyDataWithInnerds相關的類型信息,但是不必這樣做並且讓序列化程序知道「我知道這是一個MyDataWithInnerds,但你可以把它當作基地邁德特」
謝謝, 邁克
編輯
我可以到以下添加到我的配置文件上服務器:
<system.runtime.serialization>
<dataContractSerializer>
<declaredTypes>
<add type="MyClientLib.MyData, MyClientLib">
<knownType type="MyServerLib.MyDataWithInnerds, MyServerLib"/>
</add>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>
這使得序列化正常工作。
它只是留下了兩個方面的問題:
- 在我的JSON序列化,我結束了包含派生類類型「__type」成員。我可以刪除嗎?
- 是否有一種聲明方式在服務器對象(而不是MyData)上執行配置(添加KnownType的)?
Thanks2, 邁克
對於一些替代解決方案,請參閱[鏈接](http:// stackoverflow。COM /問題/ 4140920 /如何對序列化-A-派生類型-AS-其基型與 - WCF)。 – Suncat2000 2015-04-01 18:29:58