Есть ли способ использовать FastMember ObjectReader поверх раскрытия / динамического - PullRequest
1 голос
/ 08 июля 2019

Есть ли способ использовать FastMember ObjectReader.Create над списком ExpandoObject.

Вот простой тестовый пример, который я сделал для проверки:

using FastMember;
using System;
using System.Collections.Generic;
using System.Data;
using System.Dynamic;
using System.Linq;

namespace TestReaderAsync
{
    class Program
    {
        static void Main()
        {
            List<ExpandoObject> expandos = new List<ExpandoObject>();
            var first = GetExpando();
            var second = GetExpando();
            expandos.Add(first);
            expandos.Add(second);
            var keys = (first as IDictionary<string, object>).Keys;
            using (var reader = ObjectReader.Create(expandos, keys.ToArray()))
            {
                var dt = new DataTable();
                dt.Load(reader);
            }
        }

        private static ExpandoObject GetExpando()
        {
            ExpandoObject exp = new ExpandoObject();
            exp.TryAdd("ID", "A");
            exp.TryAdd("ID_2", "B");
            exp.TryAdd("DATE", DateTime.Now);
            exp.TryAdd("MONTH", 5);
            return exp;
        }
    }
}

Кажется,проблема заключается в функции GetMembers в TypeAccessor.Поскольку ExpandoObject наследуется от IDictionary<string, object>, тип не имеет свойств, и FastMember не может сериализовать каждый ключ словаря.Есть ли обходной путь для достижения этого?

По сути, я выполняю SQL-запросы, которые были переведены в расширения.Я хочу использовать ObjectReader для массового возврата результата в базу данных.

...