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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

接口屬性的XML序列化

接口屬性的XML序列化

溫溫醬 2019-09-20 14:47:14
我想XML序列化一個對象,該對象具有(以及其他)IModelObject類型的屬性(這是一個接口)。public class Example{    public IModelObject Model { get; set; }}當我嘗試序列化此類的對象時,我收到以下錯誤:“無法序列化示例類型的Example.Model,因為它是一個接口?!蔽抑绬栴}是接口無法序列化。但是,具體的Model對象類型在運行時才會被識別。用抽象或具體類型替換IModelObject接口并使用XMLInclude的繼承是可能的,但似乎是一個丑陋的解決方法。有什么建議么?
查看完整描述

3 回答

?
慕雪6442864

TA貢獻1812條經(jīng)驗 獲得超5個贊

解決方法是使用DataContractSerializer進行反射。您甚至不必使用[DataContract]或[DataMember]標記您的類。它將序列化任何對象,無論它是否具有接口類型屬性(包括字典)到xml中。這是一個簡單的擴展方法,它將任何對象序列化為XML,即使它有接口(注意你可以調(diào)整它以便遞歸運行)。


    public static XElement ToXML(this object o)

    {

        Type t = o.GetType();


        Type[] extraTypes = t.GetProperties()

            .Where(p => p.PropertyType.IsInterface)

            .Select(p => p.GetValue(o, null).GetType())

            .ToArray();


        DataContractSerializer serializer = new DataContractSerializer(t, extraTypes);

        StringWriter sw = new StringWriter();

        XmlTextWriter xw = new XmlTextWriter(sw);

        serializer.WriteObject(xw, o);

        return XElement.Parse(sw.ToString());

    }

LINQ表達式的作用是枚舉每個屬性,返回作為接口的每個屬性,獲取該屬性的值(底層對象),獲取該具體對象的類型將其放入數(shù)組中,并將其添加到序列化程序中已知類型列表。


現(xiàn)在,序列化器知道它序列化的類型如何,它可以完成它的工作。


查看完整回答
反對 回復 2019-09-20
  • 3 回答
  • 0 關注
  • 564 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號