序列化之对象,字符串,byte数组,XML之间的转换(一)
工作一年多了,越来越感到自己不能这样一直下去,在最好的青春里面却已经死了。被时间消磨了意志,被工作杀死了精神。我想,我只要活着,我就要去不断的要求自己,不断的去追求更高的山峰。
放眼四周,有趣的灵魂越来越少。独立的人格也越来越稀薄。我们真的不能为了工作而去工作,那样我们活着就和死了一样。生活充满了重复性,我们不断的重复着自己所做一切,上班下班,周末休息。那样活着其实已经死了。我在这一年里面厌恶这种生活。我决定开始新的生活,制定一个计划,每天朝这个方向努力,哪怕用一年两年甚至半辈子,我也是无怨无悔。
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Runtime.Serialization;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.Text;
- using System.Threading.Tasks;
- using Newtonsoft.Json;
- using System.Xml.Serialization;
- namespace Test_Control
- {
- class Program
- {
- static void Main(string[] args)
- {
- Object student = new Student() { StudentID = "", StudentName = "zhang" };
- string result = ObjectToString<Object>(student);
- Console.WriteLine(result + "\r\n");
- Student newResult = StringToObject<Student>(result);
- Console.WriteLine("ID:{0}, Name:{1}" + "\r\n", newResult.StudentID, newResult.StudentName);
- //使用UTF8编码将字符串转成byte数组
- var byt = SerializeHelper.ConvertToByte("12zhang3");
- // Console.WriteLine(BitConverter.ToString(byt));
- //使用UTF8编码将byte数组转成字符串
- string str = SerializeHelper.ConvertToString(byt);
- Console.WriteLine(str);
- //使用指定字符编码将byte数组转成字符串
- string strr = SerializeHelper.ConvertToString(byt, Encoding.Unicode);
- Console.WriteLine(strr);
- //将对象序列化为二进制数据
- var obj = new Student() { StudentID = "", StudentName = "zhang" };
- var arr = SerializeHelper.SerializeToBinary(obj);
- Console.WriteLine(BitConverter.ToString(arr));
- //将对象序列化为XML数据 并且打印
- var xml = SerializeHelper.SerializeToXml(obj);
- Console.WriteLine(BitConverter.ToString(xml));
- //将二进制数据反序列化 并且打印
- var Bt = new byte[] { , , };
- Student obje = SerializeHelper.DeserializeWithBinary<Student>(arr);
- Console.WriteLine(obje.StudentName);
- Console.ReadKey();
- }
- /// <summary>
- /// 对象转字符串(序列化后转Base64编码字符串)
- /// </summary>
- /// <param name="obj">对象</param>
- /// <returns>字符串</returns>
- public static string ObjectToString<T>(T obj)
- {
- using (MemoryStream stream = new MemoryStream())
- {
- IFormatter formatter = new BinaryFormatter();
- formatter.Serialize(stream, obj);
- stream.Position = ;
- byte[] buffer = new byte[stream.Length];
- stream.Read(buffer, , buffer.Length);
- return Convert.ToBase64String(buffer);
- }
- }
- /// <summary>
- /// 字符串转对象(Base64编码字符串反序列化为对象)
- /// </summary>
- /// <param name="str">字符串</param>
- /// <returns>对象</returns>
- public static T StringToObject<T>(string str)
- {
- using (MemoryStream stream = new MemoryStream())
- {
- byte[] bytes = Convert.FromBase64String(str);
- stream.Write(bytes, , bytes.Length);
- stream.Position = ;
- IFormatter formatter = new BinaryFormatter();
- return (T)formatter.Deserialize(stream);
- }
- }
- }
- /// <summary>
- /// 可序列化的类,用Serializable标示此类可序列化
- /// </summary>
- [Serializable]
- public class Student
- {
- public string StudentID { get; set; }
- public string StudentName { get; set; }
- }
- public static class SerializeHelper
- {
- /// <summary>
- /// 使用UTF8编码将byte数组转成字符串
- /// </summary>
- /// <param name="data"></param>
- /// <returns></returns>
- public static string ConvertToString(byte[] data)
- {
- return Encoding.UTF8.GetString(data, , data.Length);
- }
- /// <summary>
- /// 使用指定字符编码将byte数组转成字符串
- /// </summary>
- /// <param name="data"></param>
- /// <param name="encoding"></param>
- /// <returns></returns>
- public static string ConvertToString(byte[] data, Encoding encoding)
- {
- return encoding.GetString(data, , data.Length);
- }
- /// <summary>
- /// 使用UTF8编码将字符串转成byte数组
- /// </summary>
- /// <param name="str"></param>
- /// <returns></returns>
- public static byte[] ConvertToByte(string str)
- {
- return Encoding.UTF8.GetBytes(str);
- }
- /// <summary>
- /// 使用指定字符编码将字符串转成byte数组
- /// </summary>
- /// <param name="str"></param>
- /// <param name="encoding"></param>
- /// <returns></returns>
- public static byte[] ConvertToByte(string str, Encoding encoding)
- {
- return encoding.GetBytes(str);
- }
- /// <summary>
- /// 将对象序列化为二进制数据
- /// </summary>
- /// <param name="obj"></param>
- /// <returns></returns>
- public static byte[] SerializeToBinary(object obj)
- {
- MemoryStream stream = new MemoryStream();
- BinaryFormatter bf = new BinaryFormatter();
- bf.Serialize(stream, obj);
- byte[] data = stream.ToArray();
- stream.Close();
- return data;
- }
- /// <summary>
- /// 将对象序列化为XML数据
- /// </summary>
- /// <param name="obj"></param>
- /// <returns></returns>
- public static byte[] SerializeToXml(object obj)
- {
- MemoryStream stream = new MemoryStream();
- XmlSerializer xs = new XmlSerializer(obj.GetType());
- xs.Serialize(stream, obj);
- byte[] data = stream.ToArray();
- stream.Close();
- return data;
- }
- /// <summary>
- /// 将二进制数据反序列化
- /// </summary>
- /// <param name="data"></param>
- /// <returns></returns>
- public static object DeserializeWithBinary(byte[] data)
- {
- //注意,在反序列化的时候,将byte[]写入流以后,需要将游标移到首位,即将Position置零,否则反序列化将报错。
- MemoryStream stream = new MemoryStream();
- stream.Write(data, , data.Length);
- stream.Position = ;
- BinaryFormatter bf = new BinaryFormatter();
- object obj = bf.Deserialize(stream);
- stream.Close();
- return obj;
- }
- /// <summary>
- /// 将二进制数据反序列化为指定类型对象
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="data"></param>
- /// <returns></returns>
- public static T DeserializeWithBinary<T>(byte[] data)
- {
- return (T)DeserializeWithBinary(data);
- }
- /// <summary>
- /// 将XML数据反序列化为指定类型对象
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="data"></param>
- /// <returns></returns>
- public static T DeserializeWithXml<T>(byte[] data)
- {
- MemoryStream stream = new MemoryStream();
- stream.Write(data, , data.Length);
- stream.Position = ;
- XmlSerializer xs = new XmlSerializer(typeof(T));
- object obj = xs.Deserialize(stream);
- stream.Close();
- return (T)obj;
- }
- }
- }
序列化之对象,字符串,byte数组,XML之间的转换(一)的更多相关文章
- 做筛选遍历时遇到的json字符串、json对象、json数组 三者之间的转换问题
这个是后台对登录用户以及筛选条件的操作 @Override public List<SdSdPer> listResults(String sidx, String sord) { try ...
- JAVA将Object对象转byte数组
/** * 将Object对象转byte数组 * @param obj byte数组的object对象 * @return */ public static byte[] toByteArray(Ob ...
- Byte[]和BASE64之间的转换
一. BASE64编码 把byte[]中的元素当做无符号八位整数转换成只含有64个基本字符的字符串,这些基本字符是: l 大写的A-Z l 小写的a-z l 数字0-9 l '+' 和 '/' l 空 ...
- 如何在Byte[]和String之间进行转换
源自C#与.NET程序员面试宝典. 如何在Byte[]和String之间进行转换? 比特(b):比特只有0 1,1代表有脉冲,0代表无脉冲.它是计算机物理内存保存的最基本单元. 字节(B):8个比特, ...
- 使用JAXB来实现Java合xml之间的转换
使用jaxb操作Java与xml之间的转换非常简单,看个例子就明白了. //javaBean-->xml @Test public void test1() { try { JAXBContex ...
- Android Bitmap与DrawAble与byte[]与InputStream之间的转换工具类【转】
package com.soai.imdemo; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; ...
- java与xml之间的转换(jaxb)
使用java提供的JAXB来实现java到xml之间的转换,先创建两个持久化的类(Student和Classroom): Classroom: package com.model; public cl ...
- 可序列化对象和byte[]数组之间的互转
/// <summary> /// 将可序列化对象转成Byte数组 /// </summary> /// <param name="obj">对 ...
- json字符串、json对象、数组 三者之间的转换
json字符串转化成json对象 // jquery的方法 var jsonObj = $.parseJSON(jsonStr) //js 的方法 var jsonObj = JSON.parse(j ...
随机推荐
- 机器学习算法 - 最近邻规则分类KNN
上节介绍了机器学习的决策树算法,它属于分类算法,本节我们介绍机器学习的另外一种分类算法:最近邻规则分类KNN,书名为k-近邻算法. 它的工作原理是:将预测的目标数据分别跟样本进行比较,得到一组距离的数 ...
- 工厂模式(Factory Method)
1.工厂方法模式(Factory Method) 工厂方法模式分为三种: 1-1.普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建. 举例如下:(我们举一个发送邮件和短信的例子 ...
- 记一下flex弹性布局
flex弹性布局也越来越广泛的在我们代码中出现了,更加方便我们的布局.自己用了查,查了用,有些还是记不住,俗话说好脑子不如烂笔头,原来都是写在本子上的,很不幸的一次次的想翻的时候总是找不到,还是写博客 ...
- Linux服务器制定mysql数据库备份的计划任务
首先,创建一个shell脚本: Shell #!/bin/bash mysql_pwd="1234567890" mysql_dump="/usr/local/mysql ...
- iOS生成Bundle包及使用
什么是Bundle文件? 简单理解,就是资源文件包.我们将许多图片.XIB.文本文件组织在一起,打包成一个Bundle文件.方便在其他项目中引用包内的资源. Bundle文件的特点? Bundle是静 ...
- flask_login 整合 pyjwt + json 简易flask框架
现在很多框架都实现前后端分离,主要为了适应以下几个目的: 1,前后端的分离,可以使前端开发和后端开发更加分工明确,而不是后端还需要在视图模板中加入很多{% XXXX %}标签 2,是为了适应跨域调用或 ...
- java poi 导入日期为空
如上两图,如果是第一种的话,可以导入,,但,如果是第二种的话,导入为空查看,导入的文件,有这么一条 debugger发现 它把2017-11-01转为Double,转不了,出错了,所以,我在catch ...
- Tomcat下载,新建自己的项目,模拟server
一.tomcat下载 下载地址http://tomcat.apache.org/ 打开网页能够看到例如以下内容 在网页左边有Download以下就是能够下载的版本号.如6.0,7.0,8.0: 选择一 ...
- POJ 1849 Two(树的直径--树形DP)(好题)
大致题意:在某个点派出两个点去遍历全部的边,花费为边的权值,求最少的花费 思路:这题关键好在这个模型和最长路模型之间的转换.能够转换得到,全部边遍历了两遍的总花费减去最长路的花费就是本题的答案,要思考 ...
- POJ 2367 topological_sort
Genealogical tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2920 Accepted: 1962 Spe ...