Form1.cs
上传用户:lxycoco
上传日期:2022-07-21
资源大小:38457k
文件大小:7k
源码类别:

C#编程

开发平台:

Others

  1. using System;
  2. using System.Drawing;
  3. using System.Collections;
  4. using System.ComponentModel;
  5. using System.Windows.Forms;
  6. using System.Data;
  7. using System.IO;
  8. using System.Xml;
  9. using System.Xml.Serialization;
  10. namespace Wrox.ProCSharp.Xml.SerialSample4
  11. {
  12.   /// <summary>
  13.   ///   Summary description for Form1.
  14.   /// </summary>
  15.   public class Form1 : System.Windows.Forms.Form
  16.   {
  17.     private System.Windows.Forms.ListBox listBox1;
  18.     private System.Windows.Forms.Button button1;
  19.     private System.Windows.Forms.Button button2;
  20.     /// <summary>
  21.     ///   Required designer variable.
  22.     /// </summary>
  23.     private System.ComponentModel.Container components=null;
  24.     public Form1()
  25.     {
  26.       //
  27.       // Required for Windows Form Designer support
  28.       //
  29.       InitializeComponent();
  30.       //
  31.       // TODO: Add any constructor code after InitializeComponent call
  32.       //
  33.     }
  34.     /// <summary>
  35.     ///   Clean up any resources being used.
  36.     /// </summary>
  37.    protected override void Dispose( bool disposing )
  38.     {
  39.     if( disposing )
  40.     {
  41.     if (components != null) 
  42.     {
  43.     components.Dispose();
  44.     }
  45.     }
  46.     base.Dispose( disposing );
  47.     }
  48.    
  49.     #region Windows Form Designer generated code
  50.     /// <summary>
  51.     ///   Required method for Designer support - do not modify
  52.     ///   the contents of this method with the code editor.
  53.     /// </summary>
  54.     private void InitializeComponent()
  55.     {
  56.       this.listBox1 = new System.Windows.Forms.ListBox();
  57.       this.button1 = new System.Windows.Forms.Button();
  58.       this.button2 = new System.Windows.Forms.Button();
  59.       this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
  60.         | System.Windows.Forms.AnchorStyles.Right);
  61.       this.listBox1.Size = new System.Drawing.Size(336, 238);
  62.       this.listBox1.TabIndex = 0;
  63.       this.button1.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
  64.       this.button1.Location = new System.Drawing.Point(64, 264);
  65.       this.button1.TabIndex = 1;
  66.       this.button1.Text = "Serialize";
  67.       this.button1.Click += new System.EventHandler(this.button1_Click);
  68.       this.button2.Location = new System.Drawing.Point(152, 264);
  69.       this.button2.TabIndex = 2;
  70.       this.button2.Text = "Deserialize";
  71.       this.button2.Click += new System.EventHandler(this.button2_Click);
  72.       this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
  73.       this.ClientSize = new System.Drawing.Size(339, 320);
  74.       this.Controls.AddRange(new System.Windows.Forms.Control[] {this.button2,
  75.                                                                   this.button1,
  76.                                                                   this.listBox1});
  77.       this.Text = "Form1";
  78.     }
  79.     #endregion
  80.     /// <summary>
  81.     ///   The main entry point for the application.
  82.     /// </summary>
  83.     [STAThread]
  84.     static void Main() 
  85.     {
  86.       Application.Run(new Form1());
  87.     }
  88.     //SerialSample4form1.cs
  89.     private void button1_Click(object sender, System.EventArgs e)
  90.     {
  91.       //create the XmlAttributes boject
  92.       XmlAttributes attrs=new XmlAttributes();
  93.       //add the types of the objects that will be serialized
  94.       attrs.XmlElements.Add(new XmlElementAttribute("Book",typeof(BookProduct)));
  95.       attrs.XmlElements.Add(new XmlElementAttribute("Product",typeof(Product)));
  96.       XmlAttributeOverrides attrOver=new XmlAttributeOverrides();
  97.       //add to the attributes collection
  98.       attrOver.Add(typeof(Inventory),"InventoryItems",attrs);
  99.       //create the Product and Book objects
  100.       Product newProd=new Product();
  101.       BookProduct newBook=new BookProduct();
  102.       
  103.       newProd.ProductID=100;
  104.       newProd.ProductName="Product Thing";
  105.       newProd.SupplierID=10;
  106.       
  107.       newBook.ProductID=101;
  108.       newBook.ProductName="How to Use Your New Product Thing";
  109.       newBook.SupplierID=10;
  110.       newBook.ISBN="123456789";
  111.       
  112.       Product[] addProd={newProd,newBook};
  113.       Inventory inv=new Inventory();
  114.       inv.InventoryItems=addProd;
  115.       TextWriter tr=new StreamWriter("..\..\..\inventory.xml");
  116.       XmlSerializer sr=new XmlSerializer(typeof(Inventory),attrOver);
  117.       
  118.       sr.Serialize(tr,inv);
  119.       tr.Close();
  120. MessageBox.Show("Serialized!");
  121.       
  122.     }
  123.     private void button2_Click(object sender, System.EventArgs e)
  124.     {
  125.       //we need to do the same procss to deserialize
  126.       //create the new XmlAttributes collection
  127.       XmlAttributes attrs=new XmlAttributes();
  128.       //add the type information to the elements collection
  129.       attrs.XmlElements.Add(new XmlElementAttribute("Book",typeof(BookProduct)));
  130.       attrs.XmlElements.Add(new XmlElementAttribute("Product",typeof(Product)));
  131.       XmlAttributeOverrides attrOver=new XmlAttributeOverrides();
  132.       //add to the Attributes collection
  133.       attrOver.Add(typeof(Inventory),"InventoryItems",attrs);
  134.       //need a new Inventory object to deserialize to    
  135.       Inventory newInv;
  136.       //deserialize and load data into the listbox from deserialized object
  137.       FileStream f=new FileStream("..\..\..\inventory.xml",FileMode.Open);
  138.       
  139.       XmlSerializer newSr=new XmlSerializer(typeof(Inventory),attrOver);
  140.       newInv=(Inventory)newSr.Deserialize(f);
  141.       if(newInv!=null)  {
  142.         foreach(Product prod in newInv.InventoryItems)
  143.           listBox1.Items.Add(prod.ProductName);
  144.       }
  145.         
  146.       f.Close();
  147.     }
  148.     
  149.     //these classes are the same as previous example
  150.     // with the exception that the attributes are removed
  151.     //from the Inventory InventoryItems property
  152.     public class Inventory
  153.     {
  154.       private Product[] stuff;
  155.       
  156.       public Inventory() {}
  157.           
  158.       public Product[] InventoryItems {
  159.         get {return stuff;}
  160.         set {stuff=value;}
  161.       }
  162.     
  163.     }
  164.     
  165.     
  166.     public class Product {
  167.     
  168.       private int prodId;
  169.       private string prodName;
  170.       private  int suppId;
  171.      
  172.       public Product() {}
  173.        
  174.     
  175.       public int  ProductID {
  176.         get {return prodId;}
  177.         set {prodId=value;}
  178.       }
  179.       
  180.     
  181.       public string ProductName {
  182.         get {return prodName;}
  183.         set {prodName=value;}
  184.       }
  185.       
  186.     
  187.       public int SupplierID  {
  188.         get {return suppId;}
  189.         set {suppId=value;}
  190.       }
  191.      
  192.       
  193.     }
  194.    
  195.     public class BookProduct:Product
  196.     {
  197.       private string isbnNum;
  198.       
  199.       public BookProduct() {}
  200.       
  201.       public string ISBN  {
  202.         get {return isbnNum;}
  203.         set {isbnNum=value;}
  204.       }
  205.     
  206.     }
  207.     
  208.     
  209.     
  210.   }
  211. }