如何保存或存储对象的ArrayList?

时间:2013-03-08 03:14:49

标签: c#

我的项目函数返回了一个包含各种类型对象的ArrayList,我必须将其保存或存储到以后分析的位置。但我做了一些研究,但没有找到将其存储到数据库或将其写入文件的方法。

如果有任何方法可以保存或存储对象的ArrayList,我非常期待有效的方法。

6 个答案:

答案 0 :(得分:2)

首先,真的是否需要使用非泛型集合?使用List<T>而不是ArrayList几乎总是总是,除非你实际上以.NET 1.1为目标,这似乎不太可能。

在Java中使用ObjectOutputStream的等价物是在.NET中使用BinaryFormatter。您可以使用GZipStream进行压缩。请注意,这些是类,不是名称空间 - 值得在您的脑海中清除术语。 FileOutputStreamFileInputStream都由.NET中的FileStream表示。

值得注意的是,在版本控制方面,在.NET或Java中使用本机二进制序列化有点脆弱。您可能需要考虑使用JSON,Protocol Buffers,Thrift,XML等替代方案。

就我个人而言,我建议您从头开始学习C#和.NET,而不是在不知道您移植到的语言和平台的习语的情况下尝试移植Java代码。例如,您肯定希望使用using语句而不是使用“手动”finally块来处理资源。

答案 1 :(得分:1)

我在stackoverflow上发现了一些有趣的线程:

How to quickly save/load class instance to file

Saving from List<T> to txt

我认为你需要serialization

答案 2 :(得分:1)

以下将压缩对象并保存到文件:

using System;
using System.IO;
using System.IO.Compression;
using System.Runtime.Serialization.Formatters.Binary;

public static void WriteFile<T>(T obj, string path) 
{ 
    using (FileStream fs = File.OpenWrite(path))
    using (GZipStream gzip = new GZipStream(fs, CompressionMode.Compress))
    {
        BinaryFormatter bf = new BinaryFormatter(); 
        bf.Serialize(gzip , obj); 
    }
} 

public static T LoadFile<T>(string path) 
{  
    using (FileStream fs = File.OpenRead(path))
    using (GZipStream gzip = new GZipStream(fs, CompressionMode.Decompress))
    {
        BinaryFormatter bf = new BinaryFormatter(); 
        return (T)bf.Deserialize(gzip); 
    }
}

阅读并解压缩。

答案 3 :(得分:0)

到目前为止,我还没有找到解决问题的好办法。但我已经对Alina B的建议做了一些研究,并获得了一些更基本的信息来做到这一点。我有一个代码来保存对象的集合。 (我已将目标更改为使用Collection而不是ArrayList,以便在此上下文中更容易使用。

//Here I call the method with parameter of Collection of objects
Collection<object> list = new Collection<object>();
list.Add("value1");
list.Add("value2");
list.Add("value3");
SaveListToFile(list);

public void SaveListToFile(Collection<object> list)
{
    var serializer = new XmlSerializer(typeof(Collection<object>));
    using (var writer = new StreamWriter(Server.MapPath("~/Files/test.xml")))
        serializer.Serialize(writer, list);
}

在上面的方法中,我使用XmlSerializer将对象集合写入xml文件。如果Collection中的每个元素都是一个字符串,那么该方法运行得非常好。但是,如果我将任何其他对象添加到集合中,如类,ArrayList或其他一些对象类型,它将生成错误(生成XML文档时出错。)我不能保存集合。那么如何保存像ArrayList,类,整数或其他类型但不是字符串的对象集合?如果你在这里,我还需要一些帮助。

答案 4 :(得分:0)

也许您可以使用二进制序列化并保存二进制文件?然后你可以使用gzip来压缩它。 Here's a link to an example

答案 5 :(得分:0)

你真的需要XML吗?您可以尝试二进制,那里有很多daata,你不能只保存到XML中吗?