如何序列化/反序列化的ArrayList

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何序列化/反序列化的ArrayList相关的知识,希望对你有一定的参考价值。

、Binary方法进行序列化
1、首先。你被序列化的类需要用[Serializable]特性修饰,例如:
[Serializable]
public class AA

public int i = 5;

2、那么你可以用如下方法序列化和反序列化:
/// <summary>
/// 序列化为二进制字节数组
/// </summary>
/// <param name="request">要序列化的对象 </param>
/// <returns>字节数组 </returns>
public static byte[] SerializeBinary<T>(T request)

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter serializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.MemoryStream memStream = new System.IO.MemoryStream();
serializer.Serialize(memStream, request);
return memStream.GetBuffer();

/// <summary>
/// 从二进制数组反序列化得到对象
/// </summary>
/// <param name="buf">字节数组 </param>
/// <returns>得到的对象 </returns>
public static T DeserializeBinary<T>(byte[] buf)

System.IO.MemoryStream memStream = new MemoryStream(buf);
memStream.Position = 0;
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter deserializer =
new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
T newobj = (T)deserializer.Deserialize(memStream);
memStream.Close();
return newobj;

3、调用方法
AA p = new AA();
p.i = 15;
byte[] bytes = SerializeBinary<AA>(p);
AA p2 = DeserializeBinary<AA>(bytes);

二、XML序列化
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.IO;
namespace RegexActivator

public class ExtendMethods

public static void Serial<T>(T[] items, string path)

XmlSerializer xmlSerializer = new XmlSerializer(typeof(T[]));
TextWriter writer = new StreamWriter(path);
try

xmlSerializer.Serialize(writer, items);

finally

writer.Close();


public static T[] Deserial<T>(string path)

if (!File.Exists(path)) return new T[0];
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T[]));
FileStream fs = new FileStream(path, FileMode.Open);
T[] items;
try

items = (T[])xmlSerializer.Deserialize(fs);

finally

fs.Close();

return items;


参考技术A ArrayList本身已经实现了序列化接口 参考技术B 、Binary方法进行序列化
1、首先。你被序列化的类需要用[Serializable]特性修饰,例如:
[Serializable]
public class AA

public int i = 5;

2、那么你可以用如下方法序列化和反序列化:
/// <summary>
/// 序列化为二进制字节数组
/// </summary>
/// <param name="request">要序列化的对象 </param>
/// <returns>字节数组 </returns>
public static byte[] SerializeBinary<T>(T request)

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter serializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.MemoryStream memStream = new System.IO.MemoryStream();
serializer.Serialize(memStream, request);
return memStream.GetBuffer();

/// <summary>
/// 从二进制数组反序列化得到对象
/// </summary>
/// <param name="buf">字节数组 </param>
/// <returns>得到的对象 </returns>
public static T DeserializeBinary<T>(byte[] buf)

System.IO.MemoryStream memStream = new MemoryStream(buf);
memStream.Position = 0;
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter deserializer =
new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
T newobj = (T)deserializer.Deserialize(memStream);
memStream.Close();
return newobj;

3、调用方法
AA p = new AA();
p.i = 15;
byte[] bytes = SerializeBinary<AA>(p);
AA p2 = DeserializeBinary<AA>(bytes);

二、XML序列化
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.IO;
namespace RegexActivator

public class ExtendMethods

public static void Serial<T>(T[] items, string path)

XmlSerializer xmlSerializer = new XmlSerializer(typeof(T[]));
TextWriter writer = new StreamWriter(path);
try

xmlSerializer.Serialize(writer, items);

finally

writer.Close();


public static T[] Deserial<T>(string path)

if (!File.Exists(path)) return new T[0];
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T[]));
FileStream fs = new FileStream(path, FileMode.Open);
T[] items;
try

items = (T[])xmlSerializer.Deserialize(fs);

finally

fs.Close();

return items;


以上是关于如何序列化/反序列化的ArrayList的主要内容,如果未能解决你的问题,请参考以下文章

如何实现 Gson 序列化/反序列化过程中 过滤指定字段

深入分析Java的序列化与反序列化

使用 Jackson 将 JSON 反序列化为 ArrayList<POJO>

无法将 java.util.ArrayList 的实例反序列化出 VALUE_STRING

无法从 START_OBJECT 令牌中反序列化 java.util.ArrayList 的实例

使用 Jackson 将嵌套数组反序列化为 ArrayList