我們有兩個(gè)控制臺(tái)應(yīng)用程序,稱為“前端”(FE)和“后端”(BE),由WCF連接。我需要一個(gè)抽象類和一些BE 中的繼承類,在運(yùn)行時(shí)我已經(jīng)從其中之一實(shí)例化了一個(gè)對(duì)象Activator 繼承的類。每當(dāng)我想返回實(shí)例化對(duì)象時(shí),都會(huì)出現(xiàn)與連載。這是我的簡(jiǎn)化代碼[DataContract]public abstract class License{ [DataMember] public int ManagedObjectCount { get; set; }}[DataContract]public class LicenseMay2018 : License{ public Frontend.DataTypes.License GetLicenseInfo(xml xml) { Frontend.DataTypes.LicenseMay2018 licenseVerified; var licXML = nodeData[0].InnerText; //Deserialize license XmlSerializer _serializer = new XmlSerializer(typeof(LicenseMay2018)); using (StringReader _reader = new StringReader(licXML)) { licenseVerified = (Frontend.DataTypes.LicenseMay2018)_serializer.Deserialize(_reader); } }}[DataContract]public class LicenseApril2018 : License{}在 BE 方面,我按抽象類的類型返回,期望返回繼承的類,Activator 和實(shí)例化每件事都很好。唯一的問題是在方法的最后,當(dāng)它要返回FE時(shí),似乎要序列化并返回public Frontend.DataTypes.License ActivateLicense(int LicenseFileId){ // create in instance of inehrited class, no matter licensemay2018 or april2018 string assemblyName = "NMS.Common"; var className = GetLicenseType(nodeVersion[0].InnerText); // exaple : className = licensemay2018 var handle = Activator.CreateInstance(assemblyName, className); var instance = (Frontend.DataTypes.License)handle.Unwrap(); return instance.GetLicenseInfo(xmlDoc);}在運(yùn)行時(shí)我不知道確切的類型,所以我按父類的類型創(chuàng)建了實(shí)例,它可以工作并創(chuàng)建了確切的對(duì)象返回時(shí)會(huì)出現(xiàn)這個(gè)錯(cuò)誤嘗試序列化參數(shù)http://tempuri.org/:ActivateLicenseResult 時(shí)出錯(cuò) 。InnerException 消息是 'Type 'NMS.Frontend.DataTypes.LicenseMay2018' with data contract name 'LicenseMay2018: http://schemas.datacontract.org/2004/07/NMS.Frontend.DataTypes ' 不是預(yù)期的。如果您正在使用 DataContractSerializer 或?qū)⑷魏戊o態(tài)未知的類型添加到已知類型列表中,請(qǐng)考慮使用 DataContractResolver - 例如,通過使用 KnownTypeAttribute 屬性或?qū)⑺鼈兲砑拥絺鬟f給序列化程序的已知類型列表中。有關(guān)更多詳細(xì)信息,請(qǐng)參閱 InnerException。我不知道這些來自哪里:http : //tempuri.org和http://schemas.datacontract.org/2004/07 ??
wcf 序列化繼承類錯(cuò)誤
翻翻過去那場(chǎng)雪
2021-06-03 07:21:53