XML串列化的庸俗性用法-哈哈

一。废话加解释

最近天天给Winform做界面,好烦哦,拖拖拉拉的不喜欢,想偷懒。

偶然发现其实那些画上去的控件其实是被代码在 Form.Desinger.cs里

并且是代码是很相似的,

哈哈哈哈,偷懒计划开始

写一个程序来自动生成这些个代码,然后把直接把代码粘到那个文件里,不就省了很多事嘛

但如果我要后续维护这个界面呢,或是新界面要使用旧有界面的部分代码怎么办呢?

嘿嘿,邪恶的想到的类的序列化!

把平时生成的界面元素类序列化成XML流存到文件里,然后等需要的时候,把这个牛牛的XML文件反序列化回界面生成类,哈哈。

基本思想就是这样了。

二。贴代码:

1 待XML化的类-界面元素类

   [XmlRoot("Table")]//未来XML文档的Root元素
   public class DataTableInfo
   {
       //中文表名
       [XmlElement("ChineseTableName")]//未来XML文档的元素
       private string _cTable = "CTableName";
       public string CTableName
       {
           set { this._cTable = value; }
           get { return this._cTable; }
       }

//英文表名
       [XmlElement("EnglishTableName")]
       private string _eTable = "ETableName";
       public string ETableName
       {
           set { this._eTable = value; }
           get { return this._eTable; }
       }

       [XmlElement("Rows")]
       public System.Collections.Generic.List<DataBaseInfo.RowInfo> Rows = new List<RowInfo>();

   }

   public class RowInfo
   {

       //中文名
       [XmlElement("ChineseRowName")]
       string _cname = "";
       public string CName
       {
           set { this._cname = value; }
           get { return this._cname; }
       }

       //英文名
       [XmlElement("EnglishRowName")]
       string _ename = "";
       public string EName
       {
           set { this._ename = value; }
           get { return this._ename; }
       }

       //对应控件类型
       [XmlElement("RowControlType")]
       private string _ct;
       public string ConType
       {
           set { this._ct = value; }
           get { return this._ct; }
       }

       //是否复选框
       [XmlElement("RowHasCheckbox")]
       private bool _hc = false;
       public Boolean HasCheckbox
       {
           set { this._hc = value; }
           get { return this._hc; }

       }

       //复选框内容
       [XmlElement("RowCheckboxList")]
       public System.Collections.Generic.List<RadioType> CheckList = new List<RadioType>();

   }

//复选框内容类型
public class RadioType
{
    [XmlElement("CheckboxName")]
    public string DisplayName;
    [XmlElement("CheckboxValue")]
    public string Value;

}

2。类 -> XML 文件

public static void WriteXmlFile(string strFile,DataBaseInfo.DataTableInfo di)
{
    using (FileStream fs = new FileStream(strFile, FileMode.Create))
    {
      XmlSerializer formatter = new XmlSerializer(typeof(DataBaseInfo.DataTableInfo));
      formatter.Serialize(fs, di);
    }
}

3。XML 文件 –> 类

public static DataBaseInfo.DataTableInfo GetObject(System.IO.FileStream fs)
{
    DataBaseInfo.DataTableInfo dt;

    using (fs)
    {
        XmlSerializer formatter = new XmlSerializer(typeof(DataBaseInfo.DataTableInfo));
        dt = (DataBaseInfo.DataTableInfo)formatter.Deserialize(fs);
    }
    return dt;

}

等于自动生成的界面代码就不贴了,就是字符串替换。

三。升化

正经的说,兄弟从这里看到什么了没?

设计重于编码!

嘿嘿,如果我把Visio或PD生成的数据库结构导成相应格式的XML文件,

然后我们把该XML文件反序列化成类,嘿嘿,冗烦的画界面元素工作是不是会少一些呢,我们只要定义一些展现的规则,

写个程序根据表描述类生成一个界面的草样,然后人再来整整。那样岂不是很爽,哈哈。

当然只是单表的增删改,如果是多表的或是流程性的,则需要对该序列化类做相应的修改和定义一些类间关联,可做,但没兴趣。

我只为省事哈!

转载于:https://www.cnblogs.com/want990/archive/2009/05/13/1456120.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值