【问题标题】:Serialize an ArrayList of Date object type序列化 Date 对象类型的 ArrayList
【发布时间】:2012-07-21 20:19:18
【问题描述】:

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

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

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

谁能帮我解决这个问题??

谢谢!

【问题讨论】:

  • 有什么问题?你试过什么?
  • 我正在尝试正常类型的序列化,例如序列化布尔变量。但是我不确定它是否会起作用,因为我读了几篇文章说我需要一个数组列表,其中包含可序列化的对象以及所有……这对我来说没有多大意义……所以我想知道如果你能给我一个解决这个问题的方法!!
  • 如果你在尝试某事之前阅读了 5 篇文章以确保你所做的事情会奏效,那么你不会走得很快。尝试一些东西,测试它,如果它不起作用,想想问题可能是什么。只需 1 行代码即可测试。

标签: java serialization arraylist


【解决方案1】:

如果你想使用 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; 
}

【讨论】:

  • 非常感谢这位朋友!!
  • @Nisarg 感谢您听取我的建议 :)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 2015-03-18
    • 2016-05-15
    • 2014-07-10
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    相关资源
    最近更新 更多