找到对象属性的难度(反射)

时间:2013-11-16 15:16:50

标签: c# reflection

我编写了一个程序,可以处理删除和更新,存储和搜索等文件。所有客户但是我遇到的问题是反序列化

当我点击任意一行时,我想要标签网格(客户网格),以便为特定客户看到。

但我认为主要问题在于这一行,这一行是Deseriailize方法。

var objProps = obj.GetType().GetProperties();

因为代码没有正确获取对象属性

Project Files

Please see the video

 public T Deserialize<T>(string entity)
    {
        var obj = Activator.CreateInstance<T>();
        var stringProps = entity.Split(',');
        var objProps = obj.GetType().GetProperties();

        var propIndex = 0;

        for (int i = 0; i < stringProps.Length; i++)
        {
            try
            {
                if (objProps[propIndex].PropertyType.FullName == "System.String")
                {
                    objProps[propIndex].SetValue(obj, stringProps[i], null);
                }
                else if (objProps[propIndex].PropertyType.FullName == "System.Int32")
                {
                    objProps[propIndex].SetValue(obj, Convert.ToInt32(stringProps[i]), null);
                }
                else if (objProps[propIndex].PropertyType.FullName == "System.DateTime")
                {
                    var cultureInfo = new CultureInfo("fa-IR");
                    DateTime dateTime = Convert.ToDateTime(stringProps[i], cultureInfo);
                    objProps[propIndex].SetValue(obj, dateTime, null);
                }
                else
                {
                    i--;
                }
                propIndex++;
            }

            catch (IndexOutOfRangeException)
            {
                Debug.WriteLine("Index Out Of range");
            }
        }
        return obj;
    }

1 个答案:

答案 0 :(得分:1)

您的问题是,您正在呼叫Serializer.Deserialize<List<T>>(line),因此GetProperties()会返回List<T>的属性,而不是T。他们是:

  • Int32 Capacity
  • Int32 Count
  • OrderItem Int32

因此,您尝试执行的代码是将stringProps[i]30/1/2008分配给Int32 Count属性。