Image(支持 XML 序列化),注意C#中原生的Image类是无法进行Xml序列化的
1 /// <summary> 2 /// Image(支持 XML 序列化) 3 /// </summary> 4 [XmlRoot("XmlImage")] 5 public class XmlImage : IXmlSerializable 6 { 7 public System.Drawing.Image Image { get; set; } 8 9 #region 构造函数 10 11 public XmlImage() 12 { } 13 14 protected XmlImage(SerializationInfo info, StreamingContext context) 15 { } 16 #endregion 构造函数 17 18 #region IXmlSerializable Members 19 public XmlSchema GetSchema() => null; 20 21 /// <summary> 22 /// 从对象的 XML 表示形式生成该对象(反序列化) 23 /// </summary> 24 /// <param name="xr"></param> 25 public void ReadXml(XmlReader xr) 26 { 27 if (xr.IsEmptyElement) 28 return; 29 xr.ReadToFollowing(nameof(XmlImage)); 30 Image = FromBase64String(xr.ReadElementContentAsString()); 31 xr.ReadEndElement(); 32 } 33 34 /// <summary> 35 /// 将对象转换为其 XML 表示形式(序列化) 36 /// </summary> 37 /// <param name="xw"></param> 38 public void WriteXml(XmlWriter xw) 39 { 40 xw.WriteStartElement(nameof(XmlImage)); 41 xw.WriteValue(ToBase64String(Image, ImageFormat.Png)); 42 xw.WriteEndElement(); 43 } 44 #endregion IXmlSerializable Members 45 46 private static string ToBase64String(System.Drawing.Image img, ImageFormat format) 47 { 48 if (img != null) 49 { 50 using (var ms = new MemoryStream()) 51 { 52 img.Save(ms, format); 53 byte[] buffer = ms.ToArray(); 54 return Convert.ToBase64String(buffer); 55 } 56 } 57 return string.Empty; 58 } 59 60 private static System.Drawing.Image FromBase64String(string base64Str) 61 { 62 System.Drawing.Image img = null; 63 using (var ms = new MemoryStream()) 64 { 65 try 66 { 67 var buffer = Convert.FromBase64String(base64Str); 68 ms.Write(buffer, 0, buffer.Length); 69 img = System.Drawing.Image.FromStream(ms); 70 } 71 catch 72 { 73 // ignored 74 } 75 } 76 return img; 77 } 78 }
转载于:https://www.cnblogs.com/maozhh/p/6731590.html
Image(支持 XML 序列化),注意C#中原生的Image类是无法进行Xml序列化的相关推荐
- PNaCl:Google通过LLVM增强对Chrome中原生应用的支持
作者 Abel Avram ,译者 臧秀涛 发布于 五月 20, 2013 通过支持运行LLVM位码(bitcode),Google增强了对Chrome中原生应用的支持. 在Google I/O 20 ...
- android 序列化 xml serializable,关于Android中的序列化Serializable和Parcelable的学习
简单地说,"序列化"就是将运行时的对象状态转换成二进制,然后保存到流,内存或者通过网络传输给其他端. 两者最大的区别在于 存储媒介的不同,Serializable使用 I/O 读写 ...
- android xml对象,对象转成xml(并且序列化xml)在android中
第一种 在本地生成AppuserManager.xml文件,并且把对象转成了xml格式 package com.example.hasee.myxml; import android.app.Acti ...
- 序列化: 一个老家伙的咸鱼翻身(Java对象、XML、JSON、反序列化)
转自:码农翻身(微信号:coderising) 1.寒冬的蛰伏 这里的工作很繁忙,一年365天, 一天24小时几乎不停工. 但是我却是一个闲人, 因为我做的工作最近用的人太少了, 经常被冷落在一边. ...
- java中原生方法_java中原生(native)函数的用法
1.原生(Native)函数的概念 在Java程序中,可以使用由其他编程语言实现的函数,这种函数,在Java中被称之为 原生(Native)函数. 2.在Java程序中使用原生函数的优缺点 1)优点 ...
- python中常用的序列化模块_Python中的序列化和反序列化
为什么要序列化 内存中的字典.列表.集合以及各种对象,如何保存到一个文件中. 设计一套协议,按照某种规则,把内存中的数据保存到文件中,文件是一个个字节序列.所以必须把数据额转换为字节序列,输出到文件, ...
- Python 中 xpath 语法 与 lxml 库解析 HTML/XML 和 CSS Selector
The lxml.etree Tutorial :https://lxml.de/tutorial.html python3 解析 xml:https://www.cnblogs.com/deadwo ...
- android xml java混合编程_Java学习中注解与多线程,网络编程与XML技术
本部分内容主要有集合框架及泛型,实用类,输入和输出处理,注解与多线程,网络编程与XML技术.初次学习这部分会感觉很难,主要是概念难于理解,最好是多看看例子,多练习.下面是个人的总结 拉勾IT课小编为大 ...
- Java中原生(native)函数的用法
1.原生(Native)函数的概念 在Java程序中,可以使用由其他编程语言实现的函数,这种函数,在Java中被称之为 原生(Native)函数. 2.在Java程序中使用原生函数的优缺点 1)优点 ...
- Android解析xml的方法,Android中解析XML格式数据的方法
XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...
最新文章
- xampp mysql5.6_xampp运行MySQL shutdown unexpectedly解决方案
- 【VIOLA】宁可食无肉,不可居无竹
- 卷积的物理意义(经典)
- php 重定向 cookie,php – 如何在CURL重定向上传递Cookie?
- 锁的释放流程-unparkSuccessor
- JavaScript 中的 this
- [ZJOI2008]骑士
- 未处理的超时和请求取消
- linux里命令pkg-config工具的使用
- 关羽卖枣,张飞杀猪,二人何以有“盖世武功”?
- 计算机地图制图算法与原理重点,计算机地图制图算法.pptx
- Win7怎么进入注册表(regedit)
- python3 打点计时
- C++期末项目设计------制作一个游戏盒
- [2020.1.10]systemd介绍
- 展示 用户画像_到底如何做用户画像?
- 天猫高管全面解读大快消2018新零售打法
- anki怎么设置学习计划_Anki:用这套记忆卡片,学习一切你背不下来的知识 #iOS #Android #PC...
- Python Print打印计时器功能
- mysql 百万级别 更新_mysql百万级数据高效插入和更新