【问题标题】:Serilization. How to serialize multiple lists into one file?序列化。如何将多个列表序列化为一个文件?
【发布时间】:2021-03-23 11:29:40
【问题描述】:

我可以将一张纸塞进一个文件,但我怎样才能保存几张纸呢?如何单独引用它们?

List<string> Lines = new List<string>()
                    {
                       "1",
                       "2",
                       "3"
                    };
        
                    FileStream fsout = new FileStream("peop.dat",
                        FileMode.Create, FileAccess.Write);
                    XmlSerializer serializerout = new XmlSerializer(typeof(List<string>),
                        new Type[] { typeof(string) });
                    serializerout.Serialize(fsout, Lines,);
                    fsout.Close();
        
                    List<string> Lines1 = new List<string>();
                    FileStream fsin = new FileStream("peop.dat", FileMode.Open,
                        FileAccess.Read);
                    XmlSerializer serializerin = new XmlSerializer(typeof(List<string>),
                        new Type[] { typeof(string) });
                    Lines1 = (List<string>)serializerin.Deserialize(fsin);
                    fsin.Close();

【问题讨论】:

  • 最简单的方法是序列化Dictionary&lt;string, List&lt;string&gt;&gt;,这样您就可以按键引用列表。或者只是List&lt;List&lt;string&gt;&gt; 并使用索引。但理想情况下,您需要创建一个包含所有数据的类型(在您的情况下包含多个 List&lt;string&gt; 属性),您需要存储/恢复(最好具有版本控制和向后兼容性)并序列化/反序列化该实例。

标签: c# list serialization deserialization


【解决方案1】:

正如@Sinatr 所指出的,最好的方法是列表或列表的字典。如果将其与“Extensions.cs”NuGet 包中的 .Save() 和 .Load() 扩展方法结合使用,代码将变得如此简单:

        using Extensions;

        List<List<string>> data = new List<List<string>>();
        //Populate your lists with data here.
        data.Save("file.txt");
        data.Load("file.txt");

【讨论】:

    【解决方案2】:
    List<List<string>> reply = new List<List<string>>();
                
                List<string> Lines = new List<string>()
                {
                   "1",
                   "2",
                   "3"
                };
                List<string> Lines2 = new List<string>()
                {
                   "4",
                   "5",
                   "6"
                };
                reply.Add(Lines);
                reply.Add(Lines2);
    
                FileStream fsout = new FileStream("peop.dat",
                    FileMode.Create, FileAccess.Write);
                XmlSerializer serializerout = new XmlSerializer(typeof(List<List<string>>),
                    new Type[] { typeof(string) });
                serializerout.Serialize(fsout, reply);
                fsout.Close();
    
                List<List<string>> Lines1 = new List<List<string>>();
                FileStream fsin = new FileStream("peop.dat", FileMode.Open,
                    FileAccess.Read);
                XmlSerializer serializerin = new XmlSerializer(typeof(List<List<string>>),
                    new Type[] { typeof(string) });
                Lines1 = (List<List<string>>)serializerin.Deserialize(fsin);
                fsin.Close();
                Random r = new Random();
                return Lines1[1][r.Next(0, Lines.Count)];
    

    【讨论】:

      猜你喜欢
      • 2021-05-03
      • 1970-01-01
      • 2023-01-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 2012-03-06
      • 2017-10-01
      • 1970-01-01
      相关资源
      最近更新 更多