1

我有一个具有很多属性的视图模型,并且我创建了一个自定义属性来将数据发送到 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;
    }
}

然后我需要创建一个方法来获取一个视图模型对象并创建我的输出,我需要一些关于如何做到这一点的建议,将是这样的:

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"]。只需调用该方法将返回我需要的所有数据。

4

2 回答 2

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);

        }
于 2016-09-09T17:47:48.647 回答
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();
}
于 2016-09-09T17:45:26.657 回答