首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

延遲反序列化:動態載入不同型別配置的實作模式

     編輯:關於ASP.NET

前言

任務排程系統需支援多種任務型態,各擁不同配置結構。XML 序列化要求預知型別,本文提出「延遲反序列化」模式:先以 XmlNode[] 暫存擴展區段,使用時再依實際型別反序列化。

方案比較

方案優點缺點
XPath 直接讀靈活、無型別綁定程式碼冗長、易拼錯節點名
完整序列化強型別、自動映射需預知所有型別、擴充困難
延遲反序列化兼具彈性與強型別雙重序列化效能開銷

核心實作

[Serializable, XmlRoot(ElementName = "configuration")]
public class XmlConfig
{
    [XmlElement("extend")]
    public object Extend { get; set; }

    public T GetExtend<T>() where T : class
    {
        return Serializer.XmlDeserializerFormText<T>(ExtendRawXml);
    }

    protected string ExtendRawXml
    {
        get
        {
            var nodes = Extend as XmlNode[];
            if (nodes == null || nodes.Length == 0) return "<extend />";
            var w = new StringWriter();
            using (var writer = new XmlTextWriter(w))
            {
                writer.WriteStartElement("extend");
                foreach (var node in nodes) writer.WriteRaw(node.OuterXml);
                writer.WriteEndElement();
            }
            return w.ToString();
        }
    }
}

[Serializable, XmlRoot("extend")]
public class MyExtend
{
    public int Id { get; set; }
    public string Name { get; set; }
}

使用範例

var config = Serializer.XmlDeserializerFormText<XmlConfig>(xmlText);
var myExtend = config.GetExtend<MyExtend>(); // 實際使用時才反序列化
Console.WriteLine(myExtend.Name);

適用場景

  • 插件式架構,核心不知插件配置結構。
  • 多租戶系統,各租戶擁有專屬擴展欄位。
  • 版本演進,舊版配置相容新版型別。

總結

透過 object 暫存 XmlNode[],延遲至呼叫端決定具體型別,在彈性與型別安全間取得平衡。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved