Сериализация значения List <string>в словаре <string, List <string>> как простой массив - PullRequest
0 голосов
/ 22 января 2019

Используя драйвер Mongo .Net 2.7.2, я пытаюсь настроить сериализацию свойства словаря.В частности, я бы хотел, чтобы значение словаря a 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; }
}

Current Mapping

Вот информация об отображении, которую я предоставил для своего класса.

        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 голосов
/ 22 января 2019

Включить 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();
...