gpt4 book ai didi

c# - MongoDB 序列化 Dictionary

转载 作者:可可西里 更新时间:2023-11-01 09:11:16 25 4
gpt4 key购买 nike

我有一些模型 Dictionary<MyEnum, object> .当我尝试使用 C# 驱动程序插入 mongoDB 时,出现异常并显示以下消息:

When using DictionaryRepresentation.Document key values must serialize as strings.

当然,我可以添加属性[BsonDictionaryOptions(DictionaryRepresentation.ArrayOfArrays)]它可以工作,但我希望能够将枚举保留为字符串。

public MyEnum {
A,
B
}

[BsonDictionaryOptions(DictionaryRepresentation.Document)]
public Dictionary<MyEnum, object> MyData { get; set; }

出于不同的原因,我想在 mongo 中拥有类似的东西。

{
"MyData": {
"B": "xxxx",
"A": "xxxx"
}
}

对于单个枚举,我可以使用 [BsonRepresentation(BsonType.String)]属性,但是如何告诉字典驱动程序将枚举键序列化为字符串?

最佳答案

问题是字典序列化器没有强制键为字符串类型。要解决这个问题,请创建您自己的序列化程序并使用 BsonSerializer 属性选择它。

public class EnumDictionarySerializer<TKey, TDictionary> : DictionarySerializerBase<TDictionary> 
where TKey : struct, Enum
where TDictionary : class, IDictionary, new()
{
public EnumDictionarySerializer():base(DictionaryRepresentation.Document, new EnumSerializer<TKey>(BsonType.String), new ObjectSerializer())
{

}

protected override TDictionary CreateInstance()
{
return new TDictionary();
}
}

关于c# - MongoDB 序列化 Dictionary<MyEnum,object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36988226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com