广告
返回顶部
首页 > 资讯 > 精选 >使用C#怎么对XML对象进行序列化和反序列化操作
  • 471
分享到

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

2023-06-06 14:06:10 471人浏览 独家记忆
摘要

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

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

public class XMLUtil{    /// <summary>    /// XML & Datacontract Serialize & Deserialize Helper    /// </summary>    /// <typeparam name="T"></typeparam>    /// <param name="serialObject"></param>    /// <returns></returns>    public static string Serializer<T>(T serialObject) where T : class    {        try        {            XmlSerializer ser = new XmlSerializer(typeof(T));            System.io.MemoryStream mem = new MemoryStream();            XmlTextWriter writer = new XmlTextWriter(mem, Encoding.UTF8);            ser.Serialize(writer, serialObject);            writer.Close();             return Encoding.UTF8.GetString(mem.ToArray());        }        catch (Exception ex)        {            return null;        }    }     public static T Deserialize<T>(string str) where T : class    {        try        {            XmlSerializer mySerializer = new XmlSerializer(typeof(T));            StreamReader mem2 = new StreamReader(                    new MemoryStream(System.Text.Encoding.UTF8.GetBytes(str)),                    System.Text.Encoding.UTF8);             return (T)mySerializer.Deserialize(mem2);        }        catch (Exception)        {            return null;        }    }    }

  微软为我们提供的XmlSerializer这个类就为我们提供了这个可能,在序列化的过程中我们需要注意下面的情况,所有的属性必须是可序列化的对象,像Bitmapimage、SolidColorBrush等这些对象都是不能够进行序列化的对象,如果用上面的方法进行序列化时将返回null,正确的方式是在这些字段上面加上[XmlIgnore]说明,从而在进行序列化时候跳过这些对象,就像下面的方式。

/// <summary>///背景颜色/// </summary>private SolidColorBrush _BackgroundColor;[XmlIgnore]public SolidColorBrush BackgroundColor{    get    {        return _BackgroundColor;    }    set    {        if (value != _BackgroundColor)        {            _BackgroundColor = value;            OnPropertyChanged("BackgroundColor");        }    }}

  那么像上面的这个SolidColorBrush对象该怎样去进行序列化呢,这里我们选择将当前颜色的ARGB值保存在一个byte数组中,从而在反序列化的时候通过Color.FromArgb的方式进行还原,就像下面的方式。

byte[] colorByte=savedModel.ConfigurationBaseModel.BackgroundColorArgb;    Color backColor=Color.FromArgb(colorByte[0],colorByte[1],colorByte[2],colorByte[3]);    sourceBaseModel.BackgroundColor = new SolidColorBrush(backColor);

  那么这个对象在进行序列化的时候该怎么进行保存呢?同样的原理我们可以通过下面的方式。

/// <summary>///背景颜色/// </summary>private SolidColorBrush _BackgroundColor;[XmlIgnore]public SolidColorBrush BackgroundColor{    get    {        return _BackgroundColor;    }    set    {        if (value != _BackgroundColor)        {            _BackgroundColor = value;            OnPropertyChanged("BackgroundColor");        }    }} /// <summary>///背景颜色ARGB/// </summary>private byte[] _BackgroundColorArgb=new byte[4];[XmlArray("argb"),XmlArrayItem("value")]public byte[] BackgroundColorArgb{    get    {        if (null != _BackgroundColor)        {            Color color = _BackgroundColor.Color;            _BackgroundColorArgb[0] = color.A;            _BackgroundColorArgb[1] = color.R;            _BackgroundColorArgb[2] = color.G;            _BackgroundColorArgb[3] = color.B;        }        return _BackgroundColorArgb;    }    set    {        if (value != _BackgroundColorArgb)        {            _BackgroundColorArgb = value;            OnPropertyChanged("BackgroundColorArgb");        }         }}

  这里在实际的使用中发现,就像byte数组必须通过[XmlArray("argb"),XmlArrayItem("value")] 这类型的标识来将其分类,在将其序列化完毕以后,我们可以看看这个BackgroundColorArgb字段最终是通过怎样的方式来保存的?   

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

    在进行反序列化的时候会将这个argb和value反序列化为一个byte数组。

    除了这些特例意外,有时候经常需要将一些对象的数组进行序列化,那么原理是什么呢?这里我借用别人的一个例子来进行相关的说明。

 对象数组的Xml序列化:

 数组的Xml序列化需要使用XmlArrayAttribute和XmlArrayItemAttribute;XmlArrayAttribute指定数组元素的Xml节点名,XmlArrayItemAttribute指定数组元素的Xml节点名。

 如下代码示例: 

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Xml.Serialization;  namespace UseXmlSerialization{    class Program    {        static void Main(string[] args)        {            //声明一个猫咪对象            var cWhite = new Cat { Color = "White", Speed = 10, Saying = "White or black,  so long as the cat can catch mice,  it is a Good cat" };            var cBlack = new Cat { Color = "Black", Speed = 10, Saying = "White or black,  so long as the cat can catch mice,  it is a good cat" };              CatCollection cc = new CatCollection { Cats = new Cat[] { cWhite,cBlack} };              //序列化这个对象            XmlSerializer serializer = new XmlSerializer(typeof(CatCollection));              //将对象序列化输出到控制台            serializer.Serialize(Console.Out, cc);              Console.Read();        }    }      [XmlRoot("cats")]    public class CatCollection    {        [XmlArray("items"),XmlArrayItem("item")]        public Cat[] Cats { get; set; }    }      [XmlRoot("cat")]    public class Cat    {        //定义Color属性的序列化为cat节点的属性        [XmlAttribute("color")]        public string Color { get; set; }          //要求不序列化Speed属性        [XmlIgnore]        public int Speed { get; set; }          //设置Saying属性序列化为Xml子元素        [XmlElement("saying")]        public string Saying { get; set; }    }}

  最终获得的结果是:  

<?xml version="1.0" encoding="gb2312"?><cats xmlns:xsi="Http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">  <items>    <item color="White">      <saying>White or black,  so long as the cat can catch mice,  it is a good cat</saying>    </item>    <item color="Black">      <saying>White or black,  so long as the cat can catch mice,  it is a good cat</saying>    </item>  </items></cats> 

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: 使用C#怎么对XML对象进行序列化和反序列化操作

本文链接: https://www.lsjlt.com/news/247493.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 使用C#怎么对XML对象进行序列化和反序列化操作
    使用C#怎么对XML对象进行序列化和反序列化操作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。public class XMLUtil{&n...
    99+
    2023-06-06
  • C#对Json进行序列化和反序列化
    一、Json简介 Json(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JS的一个子集。 Json采用完全独立于语言的文本格式。这使得J...
    99+
    2022-11-13
  • C#如何对Json进行序列化和反序列化
    这篇“C#如何对Json进行序列化和反序列化”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#如何对Json进行序列化和反序...
    99+
    2023-06-30
  • C#实现对象的序列化和反序列化
    什么是序列化和反序列化: 将对象及其状态保存起来,通常是保存到文件中,叫序列化。将文件还原为对象,叫反序列化。 序列化和反序列化的接口和帮助类: 接口IFormatterobject...
    99+
    2022-11-13
    C# 序列化对象 反序列化对象
  • C#使用Json.Net对JSON与对象的序列化与反序列化
    目录一、使用Json.Net1、把DataTable转换成json格式,使用最新Json.Net DLL ,已经内置转换器。2、对Json.Net序列化和反序列化的控制二、空值的处理...
    99+
    2022-11-13
  • .如何理解.NET对象的XML序列化和反序列化
    .如何理解.NET对象的XML序列化和反序列化,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。.NET对象的XML序列化和反序列化是如何实现的呢?通过下面实例中的...
    99+
    2023-06-17
  • C#序列化与反序列化集合对象并进行版本控制
    当涉及到跨进程甚至是跨域传输数据的时候,我们需要把对象序列化和反序列化。 首先可以使用Serializable特性。 [Serializable] public cl...
    99+
    2022-11-13
  • Java对象的序列化和反序列化是什么
    这篇文章主要介绍了Java对象的序列化和反序列化是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java对象的序列化和反序列化是什么文章都会有所收获,下面我们一起来看看吧。Java 对象的序列化和反序列化是...
    99+
    2023-07-06
  • 如何使用Python中的pickle和JSON进行对象序列化和反序列化
    如何使用Python中的pickle和JSON进行对象序列化和反序列化Python是一种简单而强大的编程语言,其内置了许多有用的库和模块,使开发人员能够快速进行各种任务。其中,pickle和JSON是两个常用的模块,用于对象序列化和反序列化...
    99+
    2023-10-22
    序列化 JSON pickle
  • Java中怎么实现对象的序列化和反序列化
    这篇文章给大家分享的是有关Java中怎么实现对象的序列化和反序列化的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。引言:序列化是将对象的状态信息转换为可以存储或传输的形式的过程,在...
    99+
    2022-10-18
  • C#开发中如何处理对象序列化和反序列化
    C#开发中如何处理对象序列化和反序列化,需要具体代码示例在C#开发中,对象序列化和反序列化是非常重要的概念。序列化是将对象转换为可以在网络上传输或在磁盘上存储的格式,而反序列化则是将序列化后的数据重新转换为原始对象。本文将介绍在C#中如何处...
    99+
    2023-10-22
    序列化 反序列化 对象处理
  • python对象序列化和反序列化有什么不同
    Python对象序列化和反序列化是将Python对象转换为可存储或传输的格式,以及将存储或传输的数据重新转换为Python对象的过程...
    99+
    2023-09-13
    python
  • C#中怎么实现JSON功能及对象的序列化和反序列化
    本篇内容主要讲解“C#中怎么实现JSON功能及对象的序列化和反序列化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#中怎么实现JSON功能及对象的序列化和反序列化”吧!Newtonsoft.J...
    99+
    2023-06-03
  • Go语言对JSON数据进行序列化和反序列化
    golang中对json的序列化/反序列化操作还是比较容易的,序列化操作主要是通过encoding/json包的Marshal()方法来实现,反序列化操作主要是通过encoding/...
    99+
    2022-11-13
  • php怎么反序列化数组和对象
    这篇文章主要介绍了php怎么反序列化数组和对象,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。例子<php    $sites&n...
    99+
    2023-06-20
  • 怎么用php反序列化数组和对象
    这篇文章主要讲解了“怎么用php反序列化数组和对象”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用php反序列化数组和对象”吧!1、unserialize()用于将通过 serializ...
    99+
    2023-06-20
  • Java 中对象的序列化和反序列化有什么区别
    本篇文章给大家分享的是有关Java 中对象的序列化和反序列化有什么区别,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。主要内容如下:简洁的代码实现序列化实现的基本算法两种特殊的情...
    99+
    2023-05-31
    反序列化 java 序列化
  • C#使用对象序列化类库MessasgePack
    MessagePack是一种高效二进制序列化格式。可以在多种语言中进行快速数据交换,比如JSON格式等。它比Json更加小巧,更加高效,可以用于一些结构化数据存储 ,非常适合适用于消...
    99+
    2022-11-13
  • C#使用BinaryFormatter类、ISerializable接口、XmlSerializer类进行序列化和反序列化
    序列化是将对象转换成字节流的过程,反序列化是把字节流转换成对象的过程。对象一旦被序列化,就可以把对象状态保存到硬盘的某个位置,甚至还可以通过网络发送给另外一台机器上运行的进程。本篇主...
    99+
    2022-11-13
  • C#复杂XML反序列化为实体对象两种方式小结
    目录前言需要操作的Xml数据一、通过是手写的方式去定义Xml的实体对象模型类二、通过Visual Studio自带的生成Xml实体对象模型类1、首先Ctrl+C复制你需要生成的Xml...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作