BlockingCollection默认访问者

时间:2016-01-11 18:55:57

标签: c# concurrent-collections

我正在使用BlockingCollection并在尝试序列化时遇到了问题。 新XmlSerializer 行发生错误。错误是:

  

您必须在System.Collections.Concurrent.BlockingCollection`1 [[BlockingCollTest.MyItem,BlockingCollTest,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]上实现默认访问者,因为它继承自ICollection。

测试程序是:

using System;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.IO;
using System.Xml;
using System.Xml.Serialization;

namespace BlockingCollTest
{
    class Program
    {
        static void Main(string[] args)
        {
            BlockingCollection<MyItem> c = new BlockingCollection<MyItem>();
            c.Add(new MyItem("001", "Smith"));
            c.Add(new MyItem("002", "Johnson"));

            XmlSerializer serializer = new XmlSerializer(typeof(BlockingCollection<MyItem>));
        }
    }
    [Serializable]
    public class MyItem
    {
        public string ID { get; set; }
        public string Name { get; set; }
        public MyItem() { }
        public MyItem(string id, string name) { ID = id; Name = name; }
    }
}

尝试了几种解决方案后,我不知道如何解决这个错误。

问题:解决BlockingCollection问题序列化需要什么?

1 个答案:

答案 0 :(得分:1)

BlockingCollection未归类为[Serializable]且未实现ISerializable。因此,即使MyItem是Serializable,也无法使用XmlSerializer对其进行序列化。您可以将项目复制到单个可序列化的集合或数组(例如MyItem []),序列化它并在反序列化后重新创建BlockingCollection。