使用Mongo .Net驱动程序2.7.2,我尝试自定义Dictionary属性如何序列化。具体来说,我想将Dictionary的值List<string>
序列化为一个简单数组。
由序列化程序生成的当前文档结构
这是属性当前进行序列化的方式。如您所见,someProperty
被序列化为一个对象,_t和_v存储了.NET
的类型和值。
viewedBy: Object
someProperty: Object
_t: "System.Collections.Generic.List`1[System.String]"
_v: Array
我知道类型信息将存储以反序列化回c#POCO,但就我而言,我不需要此元数据,因为我的类型只是一个字符串数组。
所需的文档结构
我希望将属性值序列化为简单的字符串数组,如下所示
viewedBy: Object
someProperty: Array
这是我要为其自定义序列化策略的类。
public class MyDocument
{
public Dictionary<string, List<string>> ViewedBy { get; set; }
}
当前映射
这是我为我的课程提供的映射信息。
BsonClassMap.RegisterClassMap<MyDocument>(cm =>
{
cm.AutoMap();
cm.MapMember(c => c.ViewedBy)
.SetElementName("viewedBy")
.SetSerializer(new
DictionaryInterfaceImplementerSerializer<Dictionary<string,
List<string>>>(DictionaryRepresentation.Document));
// How do I specify the dictionary value should serialize as simple array?
});
问题
如何指示序列化器序列化.NET
类型为List<string>
的字典的值以序列化为简单的字符串数组?
首选项用于流畅的映射解决方案,而不是使用属性。
答案 0 :(得分:0)
包括System.Linq
随心所欲地使用它。
Dictionary<string, List<string>> m = new Dictionary<string, List<string>>();
m.Add("1", new List<string> { "Sumit", "Raj" });
m.Add("2", new List<string> { "Rahul", "Raj" });
/*Array of string. Currently 4 values*/
var res = m.SelectMany(x => x.Value).ToArray();
/*Array of List<string>. Currently 2 List With 2 Values*/
var res1 = m.Select(x => x.Value).ToArray();