将Dictionary <string,list <string =“” >>中的List <string>值序列化为简单数组

时间:2019-01-22 17:53:41

标签: c# mongodb mongodb-.net-driver

使用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>的字典的值以序列化为简单的字符串数组?

首选项用于流畅的映射解决方案,而不是使用属性。

1 个答案:

答案 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();