Как преобразовать Dynami c или объект в строго типизированные объекты в C# - PullRequest
0 голосов
/ 12 марта 2020

У меня есть класс, в котором есть следующие свойства.

Public class Classifields
{
 public int ID {get;set;}
 public Name {get; set;}
 public Type {get; set;}
}

Вышеуказанный объект используется в качестве дочернего объекта в родительском объекте. Таким образом, родительский объект будет содержать Id этого Classifields.

Для некоторых целей я беру все свойства родительского класса с загруженными в него связанными объектами, что означает, что родительский и дочерний объекты также загружаются.

Я принимаю свойства таким образом, как показано ниже.

 PropertyInfo[] allProps = typeof(T).GetProperties();            
 return allProps;

Таким образом, возвращаемые свойства будут иметь некоторое время одиночные Классификационные поля или несколько раз несколько классификационных полей.

Я принимаю значение как показано ниже

var newValue = prop.GetValue(model, null);

Для свойства списка Classifields я проверяю, полное ли свойство содержит «Classifields» или нет, и передаю список классификационных полей или отдельных Classfields в качестве динамического c объекта для обработки и получения имени со значением, разделенным запятыми, из списка или отдельного элемента.

Когда это множественная запись, я пытаюсь использовать IList объекта для типизации динамического c, он работает правильно, но когда он приходит как один объект, он терпит неудачу, потому что это это не IList.

В то же время я пытался с foreach Classifields, но это также не работает.

if(val.FullName.Contains("Classifields"))
  {
   old = (oldV != null) ? GetNames(oldV) : null;
   new = (newV != null) ? GetNames(newV) : null;
  }

public string GetNames(dynamic stringDatatoProcess)
    {
        if (stringDatatoProcess== null)
            return "";
        try
        {
            string Names = "";
            if (stringDatatoProcess!= null)
            {
                dynamic dynamicDog = stringDatatoProcess;
                string values = string.Empty;
               //IList<Classifields> classfields = dynamicDog;
                StringBuilder stringvalues = new StringBuilder();
                foreach(Classification classification in dynamicDog)
                {
                    stringvalues.Append(classification.ClsName);
                    stringvalues.Append(",");
                }
                ClsNames = stringvalues.ToString().TrimEnd(',');
            }
            return ClsNames;
        }

        catch (Exception ex)
        {

            throw ex;
        }
    }

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

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