• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        對象化數據---學習Xml Serialization的一些體會

        對象化數據---學習Xml Serialization的一些體會

        更新時間:2022-05-04 文章作者:未知 信息來源:網絡 閱讀次數:

        剛接觸.net時,就看到過一些用到Xml Serialization的例子,當時沒什么感覺。后來看了SDK和一些較大的程序后,逐漸有了點感覺。我個人感覺Xml Serialization 的最大好處是可以將一個xml文件對象化,比如說xml中的元素、屬性等都可以對應到對象、對象的屬性。這樣我們可以用對象的思想來操作數據,由于目前主流數據庫還只是關系型的(Oracle也只是部分面向對象),我們在數據層的操作顯得于其他層面有點隔。而Xml Serialization給了我們這樣一個用面向對象的思維來操作數據的可能。據個例子來說,比如說我們要做一個制作工作流程的程序,每個流程有n個階段,每個階段有n個人來完成。如果用數據庫做,就不可避免的涉及到多表關聯。這對于這樣一個數據量比較小的程序來說是一個浪費。我們來看一下怎么利用xml來做。

        ///示例xml文件
        <?xml version="1.0"?>
        <WorkflowData xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
        <workflows>
        <workflow name="請假流程" id="1">
        <stages>
        <stage name="主管核準" id="1" ordernum="1">
        <users>
        <user name="James" isAudit="1"/>
        </users>
        </stage>
        </stages>
        </workflow>
        </workflows>
        </WorkflowConfigData>

        ///示例cs文件
        using System;
        using System.Collections;
        using System.IO;
        using System.Text;
        using System.Web;
        using System.Xml.Serialization;

        namespace Portal.Modules.Workflow
        {
        public class WorkflowConfig
        {
        public static WorkflowData Settings
        {
        get
        {
        HttpContext context = HttpContext.Current;
        WorkflowData data = (WorkflowData) context.Cache["workflowconfig"];
        if (data == null)
        {
        data = LoadSettings(WorkflowConfig.ConfigFilePath);
        context.Cache.Insert("workflowconfig", data, new CacheDependency(WorkflowConfig.ConfigFilePath));
        }
        }
        }

        public static String ConfigFilePath
        {
        get
        {
        HttpContext context = HttpContext.Current;
        return context.Server.MapPath(context.Request.ApplicationPath + "//" + "Workflow//workflow.xml");
        }
        }

        public static WorkflowData LoadSettings(String fileName)
        {
        StreamReader reader = File.OpenText(fileName);
        XmlSerializer serializer = new XmlSerializer(typeof(WorkflowData));
        WorkflowData data = (WorkflowData)serializer.Deserialize(reader);
        reader.Close();
        return data;
        }

        public static void PersistSettings(WorkflowData data)
        {
        HttpContext context = HttpContext.Current;
        String configFilePath = context.Server.MapPath(context.Request.ApplicationPath + "//Workflow//workflow.xml");
        StreamWriter writer = File.CreateText(configFilePath);
        XmlSerializer serializer = new XmlSerializer(typeof(WorkflowData));
        serializer.Serialize(writer, data);
        writer.Close();
        }
        }

        public class WorkflowData
        {
        private Workflow[] _workflows;

        [XmlArray]
        public Workflow [] Workflows
        {
        get
        {
        return _workflows;
        }
        set
        {
        _workflows = value;
        }
        }

        [XmlIgnore]
        public Workflow this[int workflowID]
        {
        get
        {
        foreach(Workflow workflow in Workflows)
        {
        if(workflowID == workflow.ID)
        {
        return workflow;
        }
        }
        return null;
        }
        }
        }

        public class Workflow
        {
        private String_name;
        private int_id;
        private Stage []_stages;

        [XmlAttribute]
        public String Name
        {
        get
        {
        return _name;
        }
        set
        {
        _name = value;
        }
        }

        [XmlAttribute]
        public int ID
        {
        get
        {
        return _id;
        }
        set
        {
        _id = value;
        }
        }

        [XmlArray]
        public Stage [] Stages
        {
        get
        {
        return _stages;
        }
        set
        {
        _stages = value;
        }
        }

        [XmlIgnore]
        public Stage this[int stageid]
        {
        get
        {
        foreach(Stage stage in Stages)
        {
        if(stageid == stage.ID)
        {
        return stage;
        }
        }
        return null;
        }
        }
        }

        public class Stage
        {
        private int_id;
        private String_name;
        private int_orderNum;
        private User []_users;

        [XmlAttribute]
        public String Name
        {
        get
        {
        return _name;
        }
        set
        {
        _name = value;
        }
        }

        [XmlAttribute]
        public int ID
        {
        get
        {
        return _id;
        }
        set
        {
        _id = value;
        }
        }

        [XmlAttribute]
        public int OrderNum
        {
        get
        {
        return _orderNum;
        }
        set
        {
        _orderNum = value;
        }
        }

        [XmlArray]
        public User [] Users
        {
        get
        {
        return _users;
        }
        set
        {
        _users = value;
        }
        }
        }

        public class User
        {
        private bool_isAudit;
        private String_name;

        public bool IsAudit
        {
        get
        {
        return _isAudit;
        }
        set
        {
        _isAudit = value;
        }
        }

        public String Name
        {
        get
        {
        return _name;
        }
        set
        {
        _name = value;
        }
        }
        }
        }
        這樣我們可以這樣來操作數據
        workflow[0].stages[0].user[0] //得到用戶
        類似的我就不說了。(上面的代碼不可以直接使用,由于涉及到公司,我刪了許多,只是演示而已)
        這只是小弟的愚見,還望各位大蝦指正

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 国产成人亚洲综合无| 亚洲国产电影在线观看| 直接进入免费看黄的网站| 久久久久国色AV免费观看性色| 亚洲视频精品在线观看| 久久亚洲免费视频| 久久久久亚洲Av无码专| 7x7x7x免费在线观看| 亚洲老熟女@TubeumTV| 98精品全国免费观看视频| 亚洲色四在线视频观看| 中国xxxxx高清免费看视频| 亚洲国产成人久久综合一| 69视频在线观看免费| 亚洲成人午夜电影| 91在线视频免费91| 亚洲中文无码亚洲人成影院| 午夜一级免费视频| 日本高清免费中文在线看| JLZZJLZZ亚洲乱熟无码| 久久国产精品一区免费下载| 亚洲精品一区二区三区四区乱码 | 九九热久久免费视频| 亚洲一区二区三区偷拍女厕| 九九精品成人免费国产片| 亚洲欧洲自拍拍偷综合| 妞干网在线免费视频| 天堂亚洲免费视频| 亚洲成AV人片在WWW色猫咪| 成人免费的性色视频| 另类小说亚洲色图| 亚洲精品蜜桃久久久久久| 97青青草原国产免费观看| 亚洲国产无线乱码在线观看| 久久久久亚洲AV综合波多野结衣| 久久久精品免费国产四虎| 亚洲人成网站色在线观看| 亚洲精品国产日韩无码AV永久免费网| 久久久精品免费视频| 亚洲中文字幕乱码熟女在线| 国产午夜亚洲不卡|