如何将字符串列表转换为现有对象列表?

时间:2014-05-05 19:11:52

标签: c# xaml windows-phone-8 streamreader streamwriter

我想在Windows Phone 8应用程序中保存/恢复对象数据。对象是日志,每个日志都有自己的属性。主日志列表名为logArray。

但是,我不知道如何将保存的.txt文件转换回logArray,以便在应用程序启动时重新启动!这是我的代码:

    private async Task WriteToFile()
    {
        try
        {
            if (File.Exists("Logs.txt"))
            {
                File.Delete("Logs.txt");
            }

            StreamWriter write = new StreamWriter("Logs.txt");

            //Write each log element to a new string line
            foreach (Log element in logArray)
            {
                await write.WriteLineAsync();
            }
        }

        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.ToString());
        }

    }

    private async Task ReadFromFile()
    {
        try
        {
            //Variable definitions
            StreamReader read = new StreamReader("Logs.txt");
            List<String> lines = new List<String>();
            String line;


            if (File.Exists("Logs.txt"))
            {
                //Read each string line into a string list
                while ((line = await read.ReadLineAsync()) != null)
                {
                    lines.Add(line);
                }

                foreach (String element in lines)
                {
                    //Convert String line to logArray object

                }
            }  
        }

        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.ToString());
        } 
    }

2 个答案:

答案 0 :(得分:3)

也许您应该考虑使用XML或JSON之类的标记语言进行序列化和反序列化,然后将文本存储到文件中。

使用简单汽车对象进行XML序列化的示例:

public static void WriteFile()
{
    Car testCar= new Car();
    string path = "c:\temp\testCarPath.xml";
    XmlSerializer serializer = new XmlSerializer(typeof(Car));
    StreamWriter file = new StreamWriter(path);

    serializer.Serialize(file, testCar);
    file.Close();
}
public static void ReadFile()
{
    Car testCar;
    string path = "c:\temp\testCarPath.xml";
    XmlSerializer serializer = new XmlSerializer(typeof(Car));
    StreamReader reader = new StreamReader(path);

    testCar = (Car)serializer.Deserialize(reader);
    reader.Close();
}

答案 1 :(得分:2)

如果您询问如何将lines变量List<string>转换为字符串数组,那么这只是string[] logArray = lines.ToArray();

但是,如果您要求将数组或List(字符串)加载并保存到文本文件中,则以下内容涵盖您可能希望阅读的内容以简化代码。

我不明白为什么当人们真的只是想从文本文件中读取和写入时,他们一直在使用StreamReader和StreamWriter。这是你要问的吗?

为什么不使用File.WriteAllLines("logs.txt", lines);将其写入文本文件?

您也可以使用List<string> lines = File.ReadAllLines("log.txt").ToList();,或者如果您不需要列表,则string[] lines = File.ReadAllLines("log.txt");再简单一步。

当然,你可以对数据进行切片和切块,但是一旦你拥有数组中的每一行或者内存中的List,你的心脏就会想要。这些只是跳过大约20行不必要的代码。 ;)

快乐的编码!!