使用Reflection从字符串中获取属性值

时间:2014-01-22 11:34:14

标签: c#-4.0 system.reflection

我不熟悉这种反射概念,并在从字符串中检索属性值时发现问题。例如。

我有一个具有以下属性的类Employee:

public string Name {get;set;}
public int Age {get;set;}
public string EmployeeID {get;set;}

string s = "Name=ABCD;Age=25;EmployeeID=A12";

我想从这个字符串中检索每个属性的值,并创建一个Employee的新对象,并从每个字段的字符串中检索这些值。

有人可以建议如何使用反射来完成吗?

2 个答案:

答案 0 :(得分:0)

//可能是..

string s =“Name = ABCD; Age = 25; EmployeeID = A12”;

        string[] words = s.Split(';');
        foreach (string word in words)
        {
            string[] data = word.Split('=');
            string _data = data[1];
            Console.WriteLine(Name);
        }

答案 1 :(得分:0)

这是一个如何做到这一点的例子

它像你想要的那样使用了反射^^

using System;
using System.Collections.Generic;
using System.Reflection;

namespace replace
{
    public class Program
    {
        private static void Main(string[] args)
        {
            var s = "Name=ABCD;Age=25;EmployeeID=A12";
            var list = s.Split(';');

            var dic = new Dictionary<string, object>();

            foreach (var item in list)
            {
                var probVal = item.Split('=');
                dic.Add(probVal[0], probVal[1]);
            }

            var obj = new MyClass();

            PropertyInfo[] properties = obj.GetType().GetProperties();

            foreach (PropertyInfo property in properties)
            {
                Console.WriteLine(dic[property.Name]);
                if (property.PropertyType == typeof(Int32))
                    property.SetValue(obj, Convert.ToInt32(dic[property.Name]));
                //else if (property.PropertyType== typeof(yourtype))
                //    property.SetValue(obj, (yourtype)dic[property.Name]);
                else
                    property.SetValue(obj, dic[property.Name]);
            }

            Console.WriteLine("------------");
            Console.WriteLine(obj.Name);
            Console.WriteLine(obj.Age);
            Console.WriteLine(obj.EmployeeID);
            Console.Read();
        }
    }

    public class MyClass
    {
        public string Name { get; set; }

        public int Age { get; set; }

        public string EmployeeID { get; set; }
    }
}