Để bắt đầu mình sẽ tạo ra 1 class với mục đích demo như sau:

public class User 
{
    public string ID { get; set; }
    public string username { get; set; }
    public string email { get; set; }
    public string phoneNumber { get; set; }
    public string password { get; set; }
    public string salt { get; set; }
}

Với class User đã tạo ra ở trên, ta có 5 thuộc tính:

  • ID
  • username
  • email
  • phoneNumber
  • password
  • salt

Để chuyển thuộc tính về mảng hay dictionary thì cần:

using System.Reflection;

Chuyển các thuộc tính thành mảng

Từ 5 thuộc tính trên, ta sẽ chuyển về mảng 1 chiều ( kiểu string ) và giá trị của các thuộc tính tương ứng với thự tự các thuộc tính.

public static void Main()
{
  
	User user = new User 
    {
      ID = "23487",
      email = "[email protected]",
      password = "slfew39232nfi3fj435",
      phoneNumber = "0324709637",
      username = "phanxuanchanh",
      salt = "230923fjdslfj"
    }
  
    string[] arr = user.GetType()
                .GetProperties()
                .Select(prop =>
                {
                    object value = prop.GetValue(obj, null);
                    return value == null ? null : value.ToString();
                }).ToArray();
  
   for(int i = 0; i < arr.Length; i++)
   {
     Console.WriteLine($"Index = {i} => Value: {arr[i]}");
   }
}

Kết quả sau khi chạy chương trình sẽ như sau:

  • Index = 0 => Value: 23487
  • Index = 1 => Value: phanxuanchanh
  • Index = 2 => Value: [email protected]
  • Index = 3 => Value: 0324709637
  • Index = 4 => Value: slfew39232nfi3fj435
  • Index = 5 => Value: 230923fjdslfj

Chuyển các thuộc tính thành kiểu Dictionary

Các thuộc tính sẽ được chuyển thành 1 Dictionary trong đó:

  • Key là tên của thuộc tính kiểu string
  • Value là giá trị của thuộc tính kiểu string
public static void Main()
{
 
	User user = new User
    {
      ID = "23487",
      username = "phanxuanchanh",
      email = "[email protected]",
      phoneNumber = "0324709637",
      password = "slfew39232nfi3fj435",
      salt = "230923fjdslfj"
    }
  
     Dictionary<string, string> dict = obj.GetType()
         .GetProperties(BindingFlags.Instance | BindingFlags.Public)
         .ToDictionary(
              prop => prop.Name,
              prop => (prop.GetValue(obj, null) == null) 
       	             ? null 
                     : prop.GetValue(obj, null).ToString()
          );
  
     foreach(KeyValuePair<string, string> pair in dict){
         Console.WriteLine($"Key: {pair.Key} ==> Value: {pair.Value}");
     }
}

Kết quả sau khi chạy chương trình sẽ như sau:

  • Key: ID ==> Value: 23487
  • Key: username ==> Value: phanxuanchanh
  • Key: email ==> Value: [email protected]
  • Key: phoneNumber ==> Value: 0324709637
  • Key: password ==> Value: slfew39232nfi3fj435
  • Key: salt ==> Value: 230923fjdslfj

Xây dựng lớp tổng quát

using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace Common.ReflectionExtension
{
    public class ReflectionExtension<T>
    {
        public static string[] ToArray(T obj)
        {
            string[] arr = obj.GetType()
                .GetProperties()
                .Select(prop =>
                {
                    object value = prop.GetValue(obj, null);
                    return value == null ? null : value.ToString();
                }).ToArray();
            return arr;
        }
        public static Dictionary<string, string> ToDictionary(T obj)
        {
            Dictionary<string, string> dict = obj.GetType()
                .GetProperties(BindingFlags.Instance | BindingFlags.Public)
                .ToDictionary(
                    prop => prop.Name,
                    prop => (prop.GetValue(obj, null) == null) 
                           ? null 
                           : prop.GetValue(obj, null).ToString());
            return dict;
        }
    }
}