我正在尝试序列化词典的字典,其中父词典的键为enum
类型,子词典的键为DateTime
类型。尝试插入我的收藏夹时,我遇到了
使用DictionaryRepresentation时。文档键值必须序列化为字符串
我读过一些论坛,讨论了将enum
序列化为string
的过程,但是由于当前存在模型定义,我不确定如何使用此方法。
当前使用的两个字典模型只是Dictionary
类的实现:
索引值
{
public class IndexValues : Dictionary<Index, DateDictionary> { }
}
DateDictionary
public class DateDictionary : Dictionary<DateTime, double>
{
public double AsOf(DateTime d)
{
DateTime date = d;
while (date >= Keys.Min())
{
if (TryGetValue(date, out var value))
{
return value;
}
date = date.AddDays(-1);
}
throw new Exception($"The dictionary doesn't have a value for any date less than or equal to {d}.");
}
}
索引
public enum Index
{
SPX,
NDX
}
我通过简单地实例化两个类的新实例并在所需类型中添加值,来在主程序中向字典添加值。
IndexValues indexRecords = new IndexValues();
...
var enumHead = (Index)Enum.Parse(typeof(Index), header[l]); // header is simply a list of strings
...
DateDictionary dateDict = new DateDictionary();
var date = Convert.ToDateTime(dataLine[j]); // dataLine is simply a list of strings
var value = Convert.ToDouble(dataLine[k]);
if (indexRecords.ContainsKey(enumHead))
{
indexRecords[enumHead].Add(date, value);
}
else
{
dateDict.Add(date, value);
indexRecords.Add(enumHead, dateDict);
}
我尝试在模型定义中定义键和值,并对[BsonRepresentation(BsonType.String)]
和enum
的值分别使用DateTime
和对[BsonDictionaryOptions(DictionaryRepresentation.Document)]
的值DateDictionary
,但仍然遇到相同的问题。
在这种情况下我想念什么,正确的方向是什么?作为参考,我正在使用C#驱动程序v2.8.1。
答案 0 :(得分:0)
原来,我需要两个串行器而不是一个。我在全局范围内定义了这些代码,并且可以毫无问题地插入。
BsonSerializer.RegisterSerializer(new EnumSerializer<Index>(BsonType.String));
BsonSerializer.RegisterSerializer(new DateTimeSerializer(DateTimeKind.Local, BsonType.String));