欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#實現(xiàn)XML序列化與反序列化

 更新時間:2022年06月06日 10:48:48   作者:springsnow  
這篇文章介紹了C#實現(xiàn)XML序列化與反序列化的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、使用 System.Xml.Serialization類

1、定義元數(shù)據

引入System.Xml.Serialization命名空間。

XML序列化常用屬性:

  • XmlRoot
  • XmlType
  • XmlText
  • XmlEnum
[Serializable]
[XmlRoot]
public class Product
{
    public int ProductID { set; get; }//默認為[XmlElement("ProductID")] 

    [XmlAttribute("Discount")]
    public int DisCount { set; get; }
}

public class BookProduct : Product
{
    public BookProduct() { }
    public string ISBN { get; set; }
}

[XmlRoot("inv")]
public class Inventory
{
    public Inventory() { }
    [XmlArray("allpro")]
    [XmlArrayItem("prod", typeof(Product)),
     XmlArrayItem("book", typeof(BookProduct))]
    public Product[] InventroyItems { set; get; }
}

2、簡單序列化與反序列化

//序列化
Product product = new Product() { ProductID = 1, DisCount = 5 };
string s = "";
using (StringWriter sw = new StringWriter())
{
    XmlSerializer xz = new XmlSerializer(typeof(Product));
    xz.Serialize(sw, product);
    s = sw.ToString();
}
Console.WriteLine(s);

//
// Discount="5">
//   1
//

//反序列化
using (StringReader sr = new StringReader(s))
{
    XmlSerializer xz = new XmlSerializer(typeof(Product));
    product = xz.Deserialize(sr) as Product;
}

Console.WriteLine(product .ProductID.ToString() + ", " + product.DisCount); //1, 5

3、集合的序列化與反序列化

//序列化
List list = new List(){
    new Product() { ProductID = 1, DisCount =5 },
    new BookProduct() {  ProductID = 1, DisCount =3, ISBN="aaaa"}
   };
Inventory invertoy = new Inventory { InventroyItems = list.ToArray() };

string s = "";
using (StringWriter sw = new StringWriter())
{
    XmlSerializer xz = new XmlSerializer(typeof(Inventory));
    xz.Serialize(sw, invertoy);
    s = sw.ToString();
}
Console.WriteLine(s);

//
//
//  <allpro>
//       <prod Discount="5">
//         1
//       
//   <book Discount="3">
//           1
//           aaaa
//       
//   allpro>
//

//反序列化
using (StringReader sr = new StringReader(s))
{
    XmlSerializer xz = new XmlSerializer(typeof(Inventory));
    invertoy = xz.Deserialize(sr) as Inventory;
}

Console.WriteLine(invertoy.InventroyItems[0].ProductID.ToString() + ", " + invertoy.InventroyItems[0].DisCount); //1, 5

4、在不能更改數(shù)據的情況下,可以用代碼重載 XmlAttributeOverrides

List list = new List(){
    new Product() { ProductID = 1, DisCount =5 },
    new BookProduct() {  ProductID = 1, DisCount =3, ISBN="aaaa"}
  };
Inventory invertoy = new Inventory { InventroyItems = list.ToArray() };


string s = "";
//序列化
using (StringWriter sw = new StringWriter())
{
    XmlAttributes attrs = new XmlAttributes();
    attrs.XmlElements.Add(new XmlElementAttribute("product1", typeof(Product)));
    attrs.XmlElements.Add(new XmlElementAttribute("book1", typeof(BookProduct)));
    XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides();
    attrOverrides.Add(typeof(Inventory), "InventroyItems", attrs);
    XmlSerializer xz = new XmlSerializer(typeof(Inventory), attrOverrides);

    xz.Serialize(sw, invertoy);
    s = sw.ToString();
}
Console.WriteLine(s);

//
//http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
//  <product1 Discount="5">
//    1
//  
//  <book1 Discount="3">
//    1
//    aaaa
//  

//


//反序列化
using (StringReader sr = new StringReader(s))
{
    XmlAttributes attrs = new XmlAttributes();
    attrs.XmlElements.Add(new XmlElementAttribute("product1", typeof(Product)));
    attrs.XmlElements.Add(new XmlElementAttribute("book1", typeof(BookProduct)));
    XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides();
    attrOverrides.Add(typeof(Inventory), "InventroyItems", attrs);
    XmlSerializer xz = new XmlSerializer(typeof(Inventory), attrOverrides);
    invertoy = xz.Deserialize(sr) as Inventory;
}

Console.WriteLine(invertoy.InventroyItems[0].ProductID.ToString() + ", " + invertoy.InventroyItems[0].DisCount); //1, 5

5、通用類

void Main()
{
    //序列化
    Product product = new Product() { ProductID = 1, DisCount = 5 };
    string s = UserQuery.SimpleSerializer.Serialize(product);
    Console.WriteLine(s);

    //反序列化
    product = UserQuery.SimpleSerializer.Deserialize(typeof(UserQuery.Product), s);
    Console.WriteLine(product.ProductID.ToString() + ", " + product.DisCount); //1, 5
}
public class SimpleSerializer
{
    /// 

    /// 序列化對象
    /// 
    /// 對象類型
    /// 對象
    /// 
    public static string Serialize(T t)
    {
        using (StringWriter sw = new StringWriter())
        {
            XmlSerializer xz = new XmlSerializer(t.GetType());
            xz.Serialize(sw, t);
            return sw.ToString();
        }
    }

    /// 

    /// 反序列化為對象
    /// 
    /// 對象類型
    /// 對象序列化后的Xml字符串
    /// 
    public static T Deserialize(Type type, string s) where T : class
    {
        using (StringReader sr = new StringReader(s))
        {
            XmlSerializer xz = new XmlSerializer(type);
            return xz.Deserialize(sr) as T;
        }
    }
}

二、用DataContractSerialize類序列化XML

1、層次結構

基類:XmlObjectSerializer

派生類:

  • DataContractSerializer
  • NetDataContractSerializer
  • DataContractJsonSerializer

需要引入的程序集:

  • System.Runtime.Serialization.dll
  • System.Runtime.Serialization.Primitives.dll

2、實體類

//訂單類
[DataContract(Name = "order", Namespace = "http://a/order")]
//[KnownType(typeof(order))]
public class Order
{
    public Order(Guid id, Product product)
    {
        this.OrderID = id;
        this.Product = product;
    }


    [DataMember(Name = "id", Order = 2)]
    public Guid OrderID { set; get; }

    [DataMember]
    public Product Product { set; get; }

}

//產品類
[DataContract(Name = "product", Namespace = "http://a/product")] //IsRequired=false,EmitDefaultValue=false
public class Product
{
    public Product(Guid id, string productArea)
    {
        this.ProductID = id;
        this.productArea = productArea;
    }

    [DataMember(Name = "id", Order = 1)]
    public Guid ProductID { set; get; }

    [DataMember]
    private string productArea { set; get; } //私有屬性也可以序列化。
}

3、序列化與反序列化

Product product = new Product(Guid.NewGuid(), "XiaMen");
Order order = new Order(Guid.NewGuid(), product);

string filename = @"C:\s.xml";
using (FileStream fs = new FileStream(filename, FileMode.Create))
{
    DataContractSerializer serializer = new DataContractSerializer(typeof(Order));
    using (XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(fs))
    {
        serializer.WriteObject(writer, order);
    }
}
Process.Start(filename);

using (FileStream fs = new FileStream(filename, FileMode.Open))
{
    DataContractSerializer serializer = new DataContractSerializer(typeof(Order));
    using (XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas()))
    {
        order = serializer.ReadObject(reader) as Order;
    }
}

得到的XML內容

<xml version="1.0" encoding="utf-8"?>
<order xmlns="http://a/order" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Product xmlns:a="http://a/product">
    <a:productArea>XiaMen</a:productArea>
    <a:id>d3b4c977-d052-4fd4-8f59-272e56d875a8</a:id>
  </Product>
  <id>96d0bb44-cee4-41b6-ae20-5d801c1b3dc9</id>
</order>

到此這篇關于C#實現(xiàn)XML序列化與反序列化的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 詳解DataGridView控件的數(shù)據綁定

    詳解DataGridView控件的數(shù)據綁定

    本文詳細講解了DataGridView控件的數(shù)據綁定,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C#七大經典排序算法系列(下)

    C#七大經典排序算法系列(下)

    這篇文章主要為大家詳細介紹了C#七大經典排序算法系列下篇,直接插入排序,希爾排序和歸并排序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • C#操作字符串方法總結實例代碼

    C#操作字符串方法總結實例代碼

    這篇文章主要介紹了C#操作字符串方法總結實例代碼,需要的朋友可以參考下
    2017-10-10
  • unity通過Mesh網格繪制圖形(三角形、正方體、圓柱)

    unity通過Mesh網格繪制圖形(三角形、正方體、圓柱)

    這篇文章主要為大家詳細介紹了unity通過Mesh網格繪制圖形:三角形、正方體、圓柱,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • DevExpress之ChartControl實現(xiàn)時間軸實例

    DevExpress之ChartControl實現(xiàn)時間軸實例

    這篇文章主要介紹了DevExpress中ChartControl實現(xiàn)時間軸的方法,涉及相關C#繪圖程序用法,具有一定的實用價值,需要的朋友可以參考下
    2014-10-10
  • C#中給Excel添加水印的具體方法

    C#中給Excel添加水印的具體方法

    這篇文章主要介紹了C#中如何給Excel添加水印,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • C#實現(xiàn)備忘錄功能

    C#實現(xiàn)備忘錄功能

    這篇文章主要為大家詳細介紹了C#實現(xiàn)備忘錄功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Unity的IPostBuildPlayerScriptDLLs實用案例深入解析

    Unity的IPostBuildPlayerScriptDLLs實用案例深入解析

    這篇文章主要為大家介紹了Unity的IPostBuildPlayerScriptDLLs實用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • extern外部方法使用C#的實現(xiàn)方法

    extern外部方法使用C#的實現(xiàn)方法

    這篇文章主要介紹了extern外部方法使用C#的實現(xiàn)方法,較為詳細的分析了外部方法使用C#的具體步驟與實現(xiàn)技巧,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • C#圖像邊緣檢測(Roberts)的方法

    C#圖像邊緣檢測(Roberts)的方法

    這篇文章主要介紹了C#圖像邊緣檢測(Roberts)的方法,涉及C#操作圖像的相關技巧,需要的朋友可以參考下
    2015-04-04

最新評論