добавление пользовательских атрибутов и получение свойств из динамического объекта - PullRequest
0 голосов
/ 18 марта 2019

У меня есть такой сценарий, в котором мы используем классы моделей для создания файла Excel, однако из-за новых запросов он требует обработки динамических объектов, включающих атрибуты, которые необходимы для обработки генератором кода файла Excel.

Итак, если у меня есть модель, скажем, Пользователь:

[Sheet]
public class User 
{
    [Column]
    public string FirstName { get; set; }

    [Column]
    public string LastName { get; set; }

    [Column]
    public string EmailAddress { get; set; }
}

Поэтому, если пользователь не хочет включать поле EmailAddress, это следует исключить, когда механизм экспорта пытается сделать model.GetType().GetProperties() дляобработать имя свойства и его значение в excel.

Я пытался использовать ExpandoObject, однако он не работает, когда я пытаюсь получить доступ к свойствам через model.GetType().GetProperties(), даже если я прошел весь PropertyInfo до значения IDictionary<string, object>.

Как мне сделать это с помощью динамического?К вашему сведению, пользовательский атрибут - это импорт, который должен быть включен как часть объекта и его свойства, поскольку существует фильтрация, использующая эти атрибуты для дальнейшей обработки класса модели.

Обновление

Этот объект является общим IList, например, это может быть IList<User>, так как это экспорт данных в Excel.

1 Ответ

0 голосов
/ 19 марта 2019

Я полагаю, вы спрашиваете, как получить все "свойства" (динамические элементы) из ExpandoObject.Все, что вам нужно сделать, это перебрать его.

public static void Main()
{
    dynamic d = new ExpandoObject();

    d.Foo = "Hello";

    Console.WriteLine("Should have one  property:");

    foreach (var i in d )
    {
        Console.WriteLine("Name: {0} Type: {1} Value: {2}", i.Key, i.Value.GetType().Name, i.Value);
    }

    Console.WriteLine("\r\nShould have two properties:");

    d.Bar = 123.45F;

    foreach (var i in d)
    {
        Console.WriteLine("Name: {0} Type: {1} Value: {2}", i.Key, i.Value.GetType().Name, i.Value);
    }
}

Вывод:

Should have one  property:
Name: Foo Type: String Value: Hello

Should have two properties:
Name: Foo Type: String Value: Hello
Name: Bar Type: Single Value: 123.45

См. Мой пример на DotNetFiddle .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...