序列化Date对象类型的ArrayList

时间:2012-07-23 15:03:18

标签: java serialization arraylist

我想序列化包含Date对象的Arraylist,然后能够对其进行反序列化并迭代反序列化版本。

目前我有一个名为DateSerialize的类,它实现了Serializable。我有一个方法可以将日期对象添加到arraylist中,然后一旦完成,我想序列化它。

下次当我运行程序时,我想反序列化该arraylist并以相同的顺序和格式获取这些对象,并希望在它上面运行迭代器。

任何人都可以帮我解决这个问题吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

如果你想使用Serializable,你应该没有问题,因为ArrayList是Serializable,就像String和每个基本类型一样。 public class DateSerialize implements Serializable {}应该做其余的事情。您可以阅读有关此方法的更多信息here。但是,序列化还有很多其他选项。所以请更具体。

实施例

首先:创建ArrayList和要放入的对象

ArrayList aList = new ArrayList();
MyBusinessObject obj = new MyBusinessObject();
obj.Name = "MyName";
obj.Address = "MyAddress";
obj.Phone = 435345;
aList.Add(obj);

第二步:序列化ArrayList

/// <summary>
/// Serialize the ArrayList
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
private string SerializeArrayList(ArrayList obj) { 
  System.Xml.XmlDocument doc = new XmlDocument();
  Type[] extraTypes = new Type[1];
  extraTypes[0] = typeof(MyBusinessObject);
  System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(ArrayList), extraTypes); 
  System.IO.MemoryStream stream = new System.IO.MemoryStream(); 
  try { 
    serializer.Serialize(stream, obj); 
    stream.Position = 0; 
    doc.Load(stream); 
    return doc.InnerXml; 
  } catch { throw; } finally { 
    stream.Close(); 
    stream.Dispose(); 
  } 
}

第三步:反序列化ArrayList

/// <summary>
/// DeSerialize serialized string
/// </summary>
/// <param name="serializedData"></param>
/// <returns></returns>
private ArrayList DeSerializeArrayList(string serializedData) {
  ArrayList list = new ArrayList();
  Type[] extraTypes = new Type[1];
  extraTypes[0] = typeof(MyBusinessObject);
  System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(ArrayList), extraTypes);
  XmlReader xReader = XmlReader.Create(new StringReader(serializedData));
  try {
    object obj = serializer.Deserialize(xReader);
    list = (ArrayList)obj;
  } catch { throw; } finally {
    xReader.Close();
  }
return list; 
}

答案 1 :(得分:0)

为什么不将DateSerialize存储为long(日期的内部值,以毫秒为单位)?