Я пытаюсь сериализовать словарь словарей, в котором родительский словарь имеет ключи типа enum
, а дочерний словарь имеет ключи типа DateTime
. При попытке вставить в мою коллекцию я встретил
При использовании DictionaryRepresentation.Document значения ключа должны сериализоваться как строки
Я читал форумы, обсуждающие сериализацию enum
в string
, однако с определениями моделей, которые существуют в настоящее время, я не уверен, как поступить с этим методом.
Две модели словарей, которые используются в настоящее время, являются просто реализациями класса Dictionary
:
IndexValues
{
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.