BlockingCollection 默认访问器
BlockingCollection default accessor
我正在使用 BlockingCollection,在尝试序列化它时遇到了 运行 问题。错误发生在 new XmlSerializer 行。错误是:
You must implement a default accessor on System.Collections.Concurrent.BlockingCollection`1[[BlockingCollTest.MyItem, BlockingCollTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] because it inherits from 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 问题的序列化需要什么?
BlockingCollection 不属于 [Serializable] 并且不实现 ISerializable。因此,即使 MyItem 是可序列化的,您也无法使用 XmlSerializer 对其进行序列化。您可以将项目复制到单个可序列化集合或数组(例如 MyItem[]),对其进行序列化并在反序列化后重新创建 BlockingCollection。
我正在使用 BlockingCollection,在尝试序列化它时遇到了 运行 问题。错误发生在 new XmlSerializer 行。错误是:
You must implement a default accessor on System.Collections.Concurrent.BlockingCollection`1[[BlockingCollTest.MyItem, BlockingCollTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] because it inherits from 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 问题的序列化需要什么?
BlockingCollection 不属于 [Serializable] 并且不实现 ISerializable。因此,即使 MyItem 是可序列化的,您也无法使用 XmlSerializer 对其进行序列化。您可以将项目复制到单个可序列化集合或数组(例如 MyItem[]),对其进行序列化并在反序列化后重新创建 BlockingCollection。