Anh đang tưởng tượng em có code C# thế này: 
public enum GNParameterCode {
    Username,
    Password,
    InfoRequestParam
}
public class InfoRequestParam
{
}
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
public class StringDataMemberAttribute : Attribute
{
    public GNParameterCode parameterCode;
    public int minLength;
    public int maxLength;
    public bool mustNonNull;
    public StringDataMemberAttribute(GNParameterCode parameterCode)
    {
        this.parameterCode = parameterCode;
    }
    public StringDataMemberAttribute(GNParameterCode parameterCode, int minLength, int maxLength, bool mustNonNull)
    {
        this.parameterCode = parameterCode;
        this.minLength = minLength;
        this.maxLength = maxLength;
        this.mustNonNull = mustNonNull;
    }
}
public class AdminLoginByAccountRequestData : LoginByAccountRequestData
{
    [StringDataMember(GNParameterCode.Username, minLength = 6, maxLength = 32, mustNonNull = true)]
    public new string username;
}
public class LoginByAccountRequestData
{
    [StringDataMember(GNParameterCode.Username, minLength = 6, maxLength = 32, mustNonNull = true)]
    public string username;
    [StringDataMember(GNParameterCode.Password, minLength = 6, maxLength = 64, mustNonNull = true)]
    public string password;
    [StringDataMember(GNParameterCode.InfoRequestParam, mustNonNull = true)]
    public InfoRequestParam infoRequestParam;
}
 
Vậy em có thể sử dụng reflection để truy cập các field như sau:
class Program
{
    public static void Main(string[] args)
    {
        // Create an instance of the class
        AdminLoginByAccountRequestData requestData = new AdminLoginByAccountRequestData();
        requestData.username = "Hello";
        requestData.password = "World";
        // Get the type of the class
        Type type = requestData.GetType();
        // Get all fields of the class
        FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
        // Loop through the fields
        foreach (FieldInfo field in fields)
        {
            // Check if the field has the StringDataMemberAttribute
            if (Attribute.IsDefined(field, typeof(StringDataMemberAttribute)))
            {
                StringDataMemberAttribute attribute = (StringDataMemberAttribute)Attribute.GetCustomAttribute(field, typeof(StringDataMemberAttribute));
                // Access the attribute properties
                GNParameterCode parameterCode = attribute.parameterCode;
                int minLength = attribute.minLength;
                int maxLength = attribute.maxLength;
                bool mustNotBeNull = attribute.mustNonNull;
                Console.WriteLine($"Field: {field.Name} value: {field.GetValue(requestData)}");
                Console.WriteLine($"ParameterCode: {parameterCode}");
                Console.WriteLine($"MinLength: {minLength}");
                Console.WriteLine($"MaxLength: {maxLength}");
                Console.WriteLine($"MustNotBeNull: {mustNotBeNull}");
            }
        }
    }
}