Ошибка FastMember и ExpandoObject

Я не уверен, поддерживается ли он, но я пытаюсь получить fastmember, чтобы дать мне информацию о типе для динамического ExpandoObject (используя код ниже), и я получаю ошибку:

System.NotSupportedException: указанный метод не поддерживается. в FastMember.TypeAccessor.GetMembers() в System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](сайт CallSite, T0 arg0)

Второй тест для анонима dynamic Тип работает нормально, но по некоторым причинам он не работает с ExpandoObject, Это должно быть возможно? Я могу придумать альтернативное решение, используя ExpandoObject Реализация словаря, если нет, было бы неплохо использовать один и тот же код для всего.

public class FastMemberTest
{
    [Fact]
    public void GetsMembersOfExpandoObject()
    {
        dynamic dyn = new ExpandoObject();
        dyn.Item1 = 1;
        dyn.Item2 = "Testing";
        var typeAccessor = TypeAccessor.Create(dyn.GetType());

        var members = typeAccessor.GetMembers();

        members.Should().NotBeNull();
    }

    [Fact]
    public void GetsMembersOfDynamicType()
    {
        dynamic dyn = new
        {
            Item1 = 1,
            Item2 = "Testing"
        };
        var typeAccessor = TypeAccessor.Create(dyn.GetType());

        var members = typeAccessor.GetMembers();

    }
}

[Тест Xunit2]

1 ответ

Решение

Я закончил тем, что написал класс, который имитировал поведение быстрого члена, но преобразовал объект расширения в IDictionary и использовал его. Затем, используя это только тогда, когда расширенный объект был передан иначе, используя fastmember. Работает нормально, и альтернативная реализация на самом деле довольно проста.

Абстракция и изоляция fastmember также хороши для кодовой базы.

Другие вопросы по тегам