我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么使用C#实现XML序列化

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么使用C#实现XML序列化

本篇内容主要讲解“怎么使用C#实现XML序列化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用C#实现XML序列化”吧!

一、使用 System.Xml.Serialization类

1、定义元数据

引入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、在不能更改数据的情况下,可以用代码重载 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=falsepublic 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#实现XML序列化”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么使用C#实现XML序列化

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么使用C#实现XML序列化

本篇内容主要讲解“怎么使用C#实现XML序列化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用C#实现XML序列化”吧!一、使用 System.Xml.Serialization类1、定义
2023-06-30

C#的XML序列化怎么实现

这篇文章主要讲解了“C#的XML序列化怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#的XML序列化怎么实现”吧!C# XML序列化实现实例:假设有一个类public class
2023-06-17

C#如何实现XML序列化

这篇文章给大家分享的是有关C#如何实现XML序列化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实现C# XML序列化技术使用到什么具体的方法呢?我们在具体的操作过程中需要注意什么呢?那么这里向你展示一个Demo
2023-06-17

使用C#怎么对XML对象进行序列化和反序列化操作

使用C#怎么对XML对象进行序列化和反序列化操作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。public class XMLUtil{ ///
2023-06-06

C# 中怎么利用BinaryFormatter实现序列化

C# 中怎么利用BinaryFormatter实现序列化,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C# BinaryFormatter的介绍:BinaryFormatt
2023-06-17

C# 中怎么利用XmlSerializer实现序列化

C# 中怎么利用XmlSerializer实现序列化,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C# XmlSerializer的出处:using Syste
2023-06-17

如何在C#项目中实现对象序列化XML

这篇文章给大家介绍如何在C#项目中实现对象序列化XML,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先,需要用到的是这两个命名空间(主要)using System.Xml;using System.Xml.Seria
2023-06-06

使用fastjson怎么实现反序列化

这期内容当中小编将会给大家带来有关使用fastjson怎么实现反序列化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、fastjson反序列化就是把JSON格式的文本转化为Java Bean对象。2、f
2023-06-14

Redis序列化使用XML还是JSON

Redis通常使用JSON进行序列化,因为JSON格式轻量且易于阅读和解析。相比之下,XML格式相对冗长且复杂,不太适合用作Redis的序列化格式。 JSON的优点包括易于编码和解码、可读性高、数据结构简单等。因此,在Redis中通常推荐使
Redis序列化使用XML还是JSON
2024-04-29

C#如何实现序列化和反序列化

这篇文章给大家分享的是有关C#如何实现序列化和反序列化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。.net下有一种技术叫做对象序列化,说得通俗一点,C#序列化就是把一个对象保存到一个文件或数据库字段中去,C#反
2023-06-17

怎么用java实现序列化

这篇文章主要介绍怎么用java实现序列化,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!package test;import java.io.*;public class Test implements Serial
2023-06-03

Java序列化与反序列化怎么实现

本篇内容主要讲解“Java序列化与反序列化怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java序列化与反序列化怎么实现”吧!序列化与反序列化概念序列化 (Serialization)是
2023-06-02

C#实现对象的序列化和反序列化

这篇文章介绍了C#实现对象序列化和反序列化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-11-13

Android xml文件的序列化实现代码

传统方式:代码如下:public void backSms(View view){ //假设我已经获取到了所有的短信 StringBuilder sb = new StringBuilder(); sb.append("
2022-06-06

Python使用protobuf序列化和反序列化的实现

protobuf介绍protobuf是一种二进制的序列化格式,相对于json来说体积更小,传输更快。 安装protobuf安装protobuf的目的主要用来将proto文件编译成python、c、Java可调用的接口。# 如果gcc版本较低
2022-06-02

Python中怎么实现序列化与反序列化

这篇文章给大家介绍Python中怎么实现序列化与反序列化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python序列化与反序列在程序运行的过程中,所有的变量都是在内存中,比如,定义一个 dict:d = dict(n
2023-06-15

Java的序列化与反序列化怎么实现

本篇内容介绍了“Java的序列化与反序列化怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java对象的序列化Java平台允许我们在内
2023-07-04

C#中怎么实现JSON功能及对象的序列化和反序列化

本篇内容主要讲解“C#中怎么实现JSON功能及对象的序列化和反序列化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#中怎么实现JSON功能及对象的序列化和反序列化”吧!Newtonsoft.J
2023-06-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录