首页 > 解决方案 > 如何在 C# 中将动态或对象转换为强类型对象

问题描述

我有一个类,其中有以下属性。

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

上述对象用作父对象中的子对象。所以父对象将包含这个 Classifields 的 Id。

出于某种目的,我正在获取父类的所有属性以及加载到其中的相关对象,这意味着也加载了父对象和子对象。

我以这种方式获取属性,如下所示。

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

所以返回的属性有时会有单个 Classifields 或有时会有多个 classifields。

我取值如下

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

对于 Classifields 列表属性,我正在检查属性 fullname 是否包含“Classifields”,并将 classifields 列表或单个 Classfields 作为动态对象进行处理,并从列表或单个项目中获取带有逗号分隔值的名称。

当它是多个条目时,我尝试使用对象的 IList 来对动态进行类型转换,它可以正常工作,但是当它作为单个对象出现时,它会失败,因为它不是 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#asp.net-mvc

解决方案


推荐阅读