从视图模型中获取所有属性以在数组

时间:2016-09-09 17:10:38

标签: c# asp.net orchardcms hubspot

我有一个具有很多属性的视图模型,我创建了一个自定义属性,用于将数据发送到hubspot,因为hubspot需要一个特定的命名法,然后我需要创建一个有一些迭代器之王的方法,对于包含我的自定义属性的每个属性,他都会输出一个特定的输出,这里是代码:

public class CreateTrialUserHubspotViewModel {

    [HubspotAttribute("firstname")]   
    [Display(Name = "First Name")]
    [StringLength(50)]
    [Required]
    public string FirstName { get; set; }

    [HubspotAttribute("lastname")]
    [Display(Name = "Last Name")]
    [StringLength(50)]
    [Required]
    public string LastName { get; set; }

    [HubspotAttribute("jobtitle")]
    [Display(Name = "Job title")]
    [StringLength(50)]
    [Required]
    public string JobTitle { get; set; }
}

现在这是我的自定义属性

[AttributeUsage(AttributeTargets.All)]
public class HubspotAttribute : System.Attribute {
    public readonly string hubspotValue;

    public HubspotAttribute(string value)
    {
        this.hubspotValue = value;
    }
}

然后我需要创建一个采用viewmodel对象并创建输出的方法,我需要一些关于如何做到这一点的建议,将是这样的:

private static RowValidation ValidateRowWithManifest<T>(CreateTrialUserHubspotViewModel trialUser) {
        RowValidation validation = new RowValidation();

        FieldInfo[] fields = typeof(T).GetPropertiesOfSomeWay;

        foreach (DataType field in fields) {
           output+=whatINeed
        }
        return validation;
    }
}

所需的输出如下:[firstname:“pepe”,lastname =“perez”,jobtitle“none”]。只是调用该方法将返回我需要的所有数据。

2 个答案:

答案 0 :(得分:1)

 public string GetString<T>(T @object)
        {
            var output = new StringBuilder();
            var type = typeof(T);
            var properties = type.GetProperties();
            foreach (var property in properties)
            {
                var attributes = property.GetCustomAttributes(typeof(HubspotAttribute), true);
                if (attributes.Length == 0)
                    continue;

                var name = ((HubspotAttribute)attributes[0]).hubspotValue;
                var value = property.GetValue(@object) ?? "none";
                output.AppendFormat("{0}:\"{1}\",", name, value);
            }

            var fields = output.ToString().TrimEnd(',');
            return string.Format("[{0}]", fields);

        }

答案 1 :(得分:0)

如果您正在寻找能够将属性连接到 看起来 的字符串(如JSON字符串)的东西(这将是一种更好的处理方式),可以使用以下内容:

private static string CreateOutput(CreateTrialUserHubspotViewModel trialUser)
{
    var properties = trialUser.GetType().GetProperties().Where(x => Attribute.IsDefined(x, typeof(HubspotAttribute))).ToList();

    var values = properties.Select(x =>
    {
        var att = x.GetCustomAttribute(typeof(HubspotAttribute));
        var key = ((HubspotAttribute)att).hubspotValue;
        var val = x.GetValue(trialUser);
        return $"{key}:{val}";
    });

    var sb = new StringBuilder();
    values.ToList().ForEach(v =>
    {
        sb.Append(v);
        if (values.Last() != v) sb.Append(',');
    });

    return sb.ToString();
}