【问题标题】:In C#, How can I serialize Queue<>? (.Net 2.0)在 C# 中,如何序列化 Queue<>? (.Net 2.0)
【发布时间】:2010-09-23 12:51:00
【问题描述】:

在 XmlSerializer 构造函数行,下面会导致 InvalidOperationException,它还抱怨没有为泛型类型实现默认访问器。

Queue<MyData> myDataQueue = new Queue<MyData>();

// Populate the queue here


XmlSerializer mySerializer =
  new XmlSerializer(myDataQueue.GetType());    

StreamWriter myWriter = new StreamWriter("myData.xml");
mySerializer.Serialize(myWriter, myDataQueue);
myWriter.Close();

【问题讨论】:

    标签: c# .net generics serialization .net-2.0


    【解决方案1】:

    序列化队列中的 数据 会更容易(也更适合 IMO) - 可能在平面数组或 List&lt;T&gt; 中。由于Queue&lt;T&gt; 实现了IEnumerable&lt;T&gt;,你应该可以使用:

    List<T> list = new List<T>(queue);
    

    【讨论】:

    • 你也可以使用 queue.ToList()
    • 我想了解更多关于您所做的“更合适”的评论。
    • @chakrit - 仅适用于 .NET 3.5,但可以。
    • 如果您序列化包含 Queue 的类,这并没有真正帮助...除非您乐于 XmlIgnore Queue 并确保您有一个 List 字段保存数据...还是有更好的方法?
    【解决方案2】:

    并非框架的所有部分都是为 XML 序列化而设计的。你会发现连载部也缺少字典。

    队列很容易实现。您可以轻松地创建自己的也实现 IList 以便可序列化。

    【讨论】:

      【解决方案3】:

      如果你想使用内置的序列化,你需要遵守它的规则,这意味着默认 ctor,以及你想要序列化的成员的公共 get/set 属性(并且可能是反序列化) 关于要序列化的数据类型(MyData)

      【讨论】:

        【解决方案4】:

        在我的例子中,我有一个动态队列,我必须保存并加载这个队列的状态。

        使用 Newtonsoft.Json:

        List<dynamic> sampleListOfRecords = new List<dynamic>();
        Queue<dynamic> recordQueue = new Queue<dynamic>();
        //I add data to queue from a sample list
        foreach(dynamic r in sampleListOfRecords)
        {
             recordQueue.Enqueue(r);
        }
        
        //Serialize
        File.WriteAllText("queue.json",
             JsonConvert.SerializeObject(recordQueue.ToList(), Formatting.Indented));
        //Deserialize
        List<dynamic> data = 
             JsonConvert.DeserializeObject<List<dynamic>>(File.ReadAllText("queue.json"));
        

        【讨论】:

          猜你喜欢
          • 2010-09-28
          • 1970-01-01
          • 1970-01-01
          • 2010-12-28
          • 2011-01-22
          • 1970-01-01
          • 2018-02-08
          • 2012-01-15
          • 1970-01-01
          相关资源
          最近更新 更多