<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

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

      [摘要]剛接觸.net時,就看到過一些用到Xml Serialization的例子,當時沒什么感覺。后來看了SDK和一些較大的程序后,逐漸有了點感覺。我個人感覺Xml Serialization 的最大好處...
      剛接觸.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] //得到用戶
      類似的我就不說了。(上面的代碼不可以直接使用,由于涉及到公司,我刪了許多,只是演示而已)
      這只是小弟的愚見,還望各位大蝦指正


      日韩精品一区二区三区高清