【发布时间】:2016-06-28 17:36:44
【问题描述】:
我有一个缓存服务,它保存多个 Price 对象,这些对象会随着新价格增量的到来而更新,有时每秒会更新多次。 每个对象在分配给 ID 的集合中保存它的各种价格。如果有人订阅特定价格,我需要在每次新价格到达时将最新价格对象序列化为 JSON,以便通过 RMQ 发送。我遇到的问题是,在某些情况下,我在序列化时收到以下错误消息,因为新价格已经到达并在之前的序列化过程中更新了对象上的集合。
“集合已修改;枚举操作可能无法执行。”
我尝试了各种序列化对象的方法(它需要尽可能快),但我仍然遇到同样的问题。
解决这个问题的最好和最有效的方法是什么,这样即使对象发生变化我也可以序列化。
简化的对象是:
//This is the collection on an object that holds the prices which are being updated
public ConcurrentDictionary<Id, Prices> Asset{ get; set; }
//Class that holds the ever updating prices
[Serializable]
public class Prices
{
public Prices()
{
Prices1 = new List<PriceVolume>();
Prices2 = new List<PriceVolume>();
}
}
提前致谢!
【问题讨论】:
-
我能想到的最简单的方法是在序列化之前创建一个深拷贝。
标签: c# serialization collections