c# - Serialize and Deserialize, 序列化 反序列化 泛型
来源:互联网 发布:淘宝ted baker 编辑:程序博客网 时间:2024/05/22 14:38
using Newtonsoft.Json;using System.IO;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;using System.Xml.Serialization;namespace Cano.ToolSet{ public class Serializer { #region 序列化,反序列化 - Byte[] public static byte[] SerializeBytes<T>(T obj) { MemoryStream stream = new MemoryStream(); IFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, obj); return stream.ToArray(); } public static T DeSerializeBytes<T>(byte[] bytes) { MemoryStream stream = new MemoryStream(bytes); IFormatter formatter = new BinaryFormatter(); stream.Seek(0, SeekOrigin.Begin); T o = (T)formatter.Deserialize(stream); return o; } #endregion #region 序列化,反序列化 - MemoryStream public static MemoryStream SerializeStream<T>(T obj) { MemoryStream stream = new MemoryStream(); IFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, obj); return stream; } public static T DeSerializeStream<T>(MemoryStream stream) { IFormatter formatter = new BinaryFormatter(); stream.Seek(0, SeekOrigin.Begin); T o = (T)formatter.Deserialize(stream); return o; } public static T DeSerializeStreamFile<T>(string memFile) { MemoryStream stream = ReadFileToMemoryStream(memFile); return DeSerializeStream<T>(stream); } public static void SerializeStreamFile<T>(T obj, string memFile) { MemoryStream stream = SerializeStream<T>(obj); WriteMemoryStreamToFile(stream, memFile); } private static void WriteMemoryStreamToFile(MemoryStream stream, string file) { using (FileStream fs = new FileStream(file, FileMode.Create, System.IO.FileAccess.Write)) { stream.WriteTo(fs); } } private static MemoryStream ReadFileToMemoryStream(string file) { using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)) { byte[] bytes = new byte[fs.Length]; fs.Read(bytes, 0, (int)fs.Length); MemoryStream ms = new MemoryStream(bytes); return ms; } } #endregion #region 序列化,反序列化 - Xml File public static void SerializeXMLFile<T>(T obj, string xmlpath) { XmlSerializer serializer = new XmlSerializer(typeof(T)); using (StreamWriter writer = new StreamWriter(xmlpath)) { serializer.Serialize(writer, obj); writer.Close(); } } public static T DeserializeXMLFile<T>(string xmlPath) { XmlSerializer deserializer = new XmlSerializer(typeof(T)); using (StreamReader reader = new StreamReader(xmlPath)) { T obj = (T)deserializer.Deserialize(reader); reader.Close(); return obj; } } #endregion #region 序列化,反序列化 - XML String public static string SerializeXML<T>(T obj) { XmlSerializer serializer = new XmlSerializer(typeof(T)); string content = string.Empty; using (StringWriter writer = new StringWriter()) { serializer.Serialize(writer, obj); content = writer.ToString(); } return content; } public static T DeserializeXML<T>(string content) { XmlSerializer deserializer = new XmlSerializer(typeof(T)); using (StringReader reader = new StringReader(content)) { T obj = (T)deserializer.Deserialize(reader); reader.Close(); return obj; } } #endregion #region 序列化,反序列化 - Json String public static string SerializeJSON<T>(T obj) { return JsonConvert.SerializeObject(obj); } public static T DeserializeJSON<T>(string content) { return JsonConvert.DeserializeObject<T>(content); } #endregion }}
Xml CDATA support:
[Serializable] public class PropertyEngineConfig { public PropertyEngineConfig() { Items = new NodeType(); } [XmlIgnore] public IEnumerable<long> ItemsParsed { get { if (!string.IsNullOrWhiteSpace(Items.Content)) { return this.<span style="font-family: Arial, Helvetica, sans-serif;">Items</span>.Content.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(i => long.Parse(i)); } return null; } private set { } } public NodeType Items { get; set; } } public class NodeType { [XmlIgnore] public string Content { get; set; } [XmlText] public XmlNode[] CDataContent { get { var dummy = new XmlDocument(); return new XmlNode[] { dummy.CreateCDataSection(Content) }; } set { if (value == null) { Content = null; return; } if (value.Length != 1) { throw new InvalidOperationException( String.Format( "Invalid array length {0}", value.Length)); } Content = value[0].Value; } } }
生成的Xml如下:
<PropertyEngineConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Items><![CDATA[123,234]]></Items></PropertyEngineConfig>
如果想使用Json序列化相关的函数,需要在nuget中安装Newtonsoft.Json,安装之后packages.config如下:
<?xml version="1.0" encoding="utf-8"?><packages> <package id="Newtonsoft.Json" version="8.0.2" targetFramework="net45" /></packages>
代码在此:https://github.com/yuxuac/Cano
- c# - Serialize and Deserialize, 序列化 反序列化 泛型
- c#序列化(Serialize)、反序列化(Deserialize)
- C#中的序列化(Serialize)、反序列化(Deserialize)
- C#序列化,反序列化(Serialize,Deserialize)
- 深入C#序列化(Serialize)、反序列化(Deserialize)
- C#序列化,反序列化(Serialize,Deserialize)
- C#序列化(Serialize)、反序列化(Deserialize)
- C#序列化,反序列化(Serialize,Deserialize)
- C#序列化,反序列化(Serialize,Deserialize)
- 序列化(Serialize)、反序列化(Deserialize)
- 序列化(Serialize)、反序列化(Deserialize)
- 对象序列化与反序列化(Serialize|Deserialize)
- 序列化(Serialize)和反序列化(Deserialize)
- Leetcode 297 Serialize and Deserialize Binary Tree(序列化与反序列化二叉树)
- 297. Serialize and Deserialize Binary Tree 序列化及反序列化
- leetcode297:二叉树的序列化和反序列化(Serialize and Deserialize Binary Tree)
- 【二叉树】树的序列化和反序列化【449. Serialize and Deserialize BST】
- LeetCode 树序列化与反序列化[递归]297. Serialize and Deserialize Binary Tree
- Cg编程
- JBoss 系列五十四:JBoss 7/WildFly 集群之 HornetQ Messaging - II(示例)
- poj1753:Flip Game
- 10328 - Coin Toss (dp 高精度)
- 如何进行Android单元测试
- c# - Serialize and Deserialize, 序列化 反序列化 泛型
- Linux父进程等待子进程结束
- Java中的线程(十)- condition lock
- 好想回到从前 好想写写诗 ~~ 从今天开始 每天写点什么吧
- 64位DLL不能正常调用32位DLL解决方案
- android中ImageView的内存问题
- Linux-C实现GPRS模块发送短信
- UVA10700
- RHEL和UBUNTU搭建嵌入式开发环境及配置开发板(笔记)