C#XML 序列化两个继承类
View Code
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Serialization; using System.IO; namespace SerializedDemo { class Program { static void Main(string[] args) { XmlAttributes attrs = new XmlAttributes(); attrs.XmlElements.Add(new XmlElementAttribute("Book", typeof(BookProduct))); attrs.XmlElements.Add(new XmlElementAttribute("Product", typeof(Product))); XmlAttributeOverrides attrOver = new XmlAttributeOverrides(); attrOver.Add(typeof(Inventory), "InverntoryItems", attrs); // Product newProd = new Product(); BookProduct newBook = new BookProduct(); newProd.ProductID = 100; newProd.ProductID = 100; newProd.ProductName = "Product Thing"; newProd.SupplierID = 10; newBook.ProductID = 101; newBook.ProductName = "How to Use Your New Product Thing"; newBook.SupplierID = 10; newBook.ISBN = "123456789"; Inventory newInv = new Inventory(); newInv.InventoryItems = new Product[] { newBook, newProd }; TextWriter tr = new StreamWriter("inventory.xml"); XmlSerializer sr = new XmlSerializer(typeof(Inventory), attrOver); sr.Serialize(tr,newInv); tr.Close(); #region 反序列号 Inventory new2Inv; FileStream f = new FileStream("inventory.xml",FileMode.Open); XmlSerializer newSr = new XmlSerializer(typeof(Inventory)); new2Inv = (Inventory)newSr.Deserialize(f); #endregion } } [System.Xml.Serialization.XmlRootAttribute()] public class Product { private int prodId; private string prodName; private int suppId; private int catId; private string qtyPerUnit; private Decimal unitPrice; private short unitsInStock; private short unitsOnOrder; private short reorderLvl; private bool discont; private int disc; //added the Discount attribute [XmlAttributeAttribute(AttributeName = "Discount")] public int Discount { get { return disc; } set { disc = value; } } [XmlElementAttribute()] public int ProductID { get { return prodId; } set { prodId = value; } } [XmlElementAttribute()] public string ProductName { get { return prodName; } set { prodName = value; } } [XmlElementAttribute()] public int SupplierID { get { return suppId; } set { suppId = value; } } [XmlElementAttribute()] public int CategoryID { get { return catId; } set { catId = value; } } [XmlElementAttribute()] public string QuantityPerUnit { get { return qtyPerUnit; } set { qtyPerUnit = value; } } [XmlElementAttribute()] public Decimal UnitPrice { get { return unitPrice; } set { unitPrice = value; } } [XmlElementAttribute()] public short UnitsInStock { get { return unitsInStock; } set { unitsInStock = value; } } [XmlElementAttribute()] public short UnitsOnOrder { get { return unitsOnOrder; } set { unitsOnOrder = value; } } [XmlElementAttribute()] public short ReorderLevel { get { return reorderLvl; } set { reorderLvl = value; } } [XmlElementAttribute()] public bool Discontinued { get { return discont; } set { discont = value; } } public override string ToString() { StringBuilder outText = new StringBuilder(); outText.Append(prodId); outText.Append("\r\n"); outText.Append(prodName); outText.Append("\r\n "); outText.Append(unitPrice); return outText.ToString(); } } public class Inventory { private Product[] stuff; //ctor public Inventory() { } //need have an attribute entry for each data type [XmlArrayItem("Prod", typeof(Product)), XmlArrayItem("Book", typeof(BookProduct))] public Product[] InventoryItems { get { return stuff; } set { stuff = value; } } public override string ToString() { StringBuilder outText = new StringBuilder(); foreach (Product prod in stuff) { outText.Append(prod.ProductName); outText.Append("\r\n"); } return outText.ToString(); } } public class BookProduct : Product { private string isbnNum; public BookProduct() { } public string ISBN { get { return isbnNum; } set { isbnNum = value; } } } }
ReadXmlSchema();只得到里面的架构

浙公网安备 33010602011771号