Я пытаюсь создать массив массивов словарей в ASP.NET Core, используя MongoDB.В конце концов, данные должны сохранить эту модель для всех применений:
Модель
{
"ContextName": "Base rates",
"Indexes": [
{
"IndexName": "S&P",
"IndexValues" : [
{
"Date": "2019-01-01",
"Value": "2600.98"
},
{
"Date": "2019-01-02",
"Value": "2605.98"
}
]
}
]
}
В настоящее время мой первый слой, определенный ниже, включает ContextName
и Indexes
:
Context.cs
public class Context
{
[BsonId]
[BsonRepresentation(MongoDB.Bson.BsonType.ObjectId)]
public string Id { get; set; }
[BsonElement("ContextName")]
public string ContextName { get; set; }
[BsonElement("Indexes")]
public ICollection<Index> Indexes { get; set; }
}
с Index
, имеющим следующую структуру:
Index.cs
public class Index
{
[BsonElement("IndexName")]
public string IndexName { get; set; }
[BsonElement("IndexValues")]
[BsonDictionaryOptions(DictionaryRepresentation.ArrayOfDocuments)]
public Dictionary<DateTime, double> IndexValues { get; set; }
}
При запуске этого кода я встречаю исключение формата, сообщающее
Произошла ошибка при десериализации свойства IndexValues класса Database.Index: недопустимый элемент: 'Дата '.'
Сначала я подумал, что это проблема с ключом типа Date
, а не string
в самой базе данных, однако я прочитал здесьближе к , что официальный драйвер фактически поддерживает это.
Я пошел немного дальше, чтобы попытаться установить пользовательский { get; set; }
для ввода ключа в виде строки, но меня встречает та же ошибкав конце концов.
public Dictionary<DateTime, double> IndexValues
{
get
{
Dictionary<DateTime, double> _indexValues = new Dictionary<DateTime, double>();
foreach (var indexValue in IndexValues)
{
_indexValues.Add(indexValue.Key, indexValue.Value);
}
return _indexValues;
}
set { IndexValues = IndexValues; } // Unsure about here as well
}
Я не уверен, что смотреть на этот случай, иищу несколько указателей, чтобы понять это.Заранее спасибо.
Обновление
Форматирование словаря во внешнем методе допускает правильный формат, но также добавляет одно дополнительное поле, поскольку оно используется для сбора всехнеобходимая информация.
public Dictionary<DateTime, double> IndexValuesDictionary
{
get { return SetDictionary(); }
set { SetDictionary(); }
}
private Dictionary<DateTime, double> SetDictionary()
{
if (_indexValues == null)
{
_indexValues = new Dictionary<DateTime, double>();
foreach (var indexValue in IndexValues)
{
_indexValues.Add(indexValue.Date, indexValue.Value);
}
}
return _indexValues;
}
{
"id": "5c93c1123369220b685719b3",
"contextName": "Base rates",
"indexes": [
{
"indexName": "S&P",
"indexValues": [
{
"date": "2019-01-01T00:00:00Z",
"value": 2600.98
},
{
"date": "2019-01-02T00:00:00Z",
"value": 2605.98
}
],
"indexValuesDictionary": { // This should not be included
"2019-01-01T00:00:00Z": 2600.98,
"2019-01-02T00:00:00Z": 2605.98
}
}
]
}
Является ли это единственно возможным вариантом для этого выхода?