Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#/MongoDB-将枚举字典键序列化为字符串_C#_Mongodb_Dictionary_Enums - Fatal编程技术网

C#/MongoDB-将枚举字典键序列化为字符串

C#/MongoDB-将枚举字典键序列化为字符串,c#,mongodb,dictionary,enums,C#,Mongodb,Dictionary,Enums,我正在尝试序列化一个字典字典,其中父字典的键为typeenum,子字典的键为typeDateTime。在尝试插入我的收藏时,我遇到了 使用DictionaryRepresentation时。文档键值必须序列化为字符串 我读过讨论将enum序列化为string的论坛,但是对于当前存在的模型定义,我不确定如何使用此方法 当前使用的两个字典模型只是字典类的实现: 索引值 { public class IndexValues : Dictionary<Index, DateDictiona

我正在尝试序列化一个字典字典,其中父字典的键为type
enum
,子字典的键为type
DateTime
。在尝试插入我的收藏时,我遇到了

使用DictionaryRepresentation时。文档键值必须序列化为字符串

我读过讨论将
enum
序列化为
string
的论坛,但是对于当前存在的模型定义,我不确定如何使用此方法

当前使用的两个字典模型只是
字典
类的实现:

索引值

{
    public class IndexValues : Dictionary<Index, DateDictionary> { }
}
我只是通过实例化两个类的新实例并将值添加到所需类型中,向主程序中的字典添加值

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);
    }
我尝试在模型定义中定义键和值,并对
enum
使用
[BsonRepresentation(BsonType.String)]
DateTime
值使用
[bsondictionaroptions(DictionaryRepresentation.Document)]
日期字典使用
,但我仍然遇到同样的问题


在这种情况下,我遗漏了什么?正确的方向是什么?作为参考,我使用的是C#driver v2.8.1。

事实证明我需要两个序列化程序而不是一个。我在全球范围内定义了这些,并且能够毫无问题地插入

BsonSerializer.RegisterSerializer(new EnumSerializer<Index>(BsonType.String));
BsonSerializer.RegisterSerializer(new DateTimeSerializer(DateTimeKind.Local, BsonType.String));
BsonSerializer.RegisterSerializer(新的EnumSerializer(BsonType.String));
RegisterSerializer(新的DateTimeSerializer(DateTimeKind.Local,BsonType.String));

原来我需要两个序列化程序而不是一个。我在全球范围内定义了这些,并且能够毫无问题地插入

BsonSerializer.RegisterSerializer(new EnumSerializer<Index>(BsonType.String));
BsonSerializer.RegisterSerializer(new DateTimeSerializer(DateTimeKind.Local, BsonType.String));
BsonSerializer.RegisterSerializer(新的EnumSerializer(BsonType.String));
RegisterSerializer(新的DateTimeSerializer(DateTimeKind.Local,BsonType.String));
BsonSerializer.RegisterSerializer(new EnumSerializer<Index>(BsonType.String));
BsonSerializer.RegisterSerializer(new DateTimeSerializer(DateTimeKind.Local, BsonType.String));