第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

wcf 序列化繼承類錯(cuò)誤

wcf 序列化繼承類錯(cuò)誤

C#
翻翻過去那場(chǎng)雪 2021-06-03 07:21:53
我們有兩個(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 ??
查看完整描述

1 回答

?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊

您需要告訴序列化程序您繼承的類型。為您的繼承類添加一個(gè) KnownType 屬性,如下所示


[DataContract]

[KnownType(typeOf(LicenseMay2018))]

[KnownType(typeOf(LicenseApril2018))]

public abstract class License

{


    [DataMember]

    public int ManagedObjectCount { get; set; }

}


[DataContract]

public class LicenseMay2018 : License

{


    public Frontend.DataTypes.License GetLicenseInfo(xml xml)

    {

        return new licenseMay2018();

    }


}


[DataContract]

public class LicenseApril2018 : License

{

}


查看完整回答
反對(duì) 回復(fù) 2021-06-05
  • 1 回答
  • 0 關(guān)注
  • 156 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)