反序列化时数据成员名称不起作用

时间:2018-09-07 16:02:55

标签: servicestack

我正在尝试使用[DataMember(name="")]来反序列化CSV,其中CSV中的字段之一与类属性的名称不同。在csv中为Url,在实体模型中为DomainName

这是我的课程。

public class MozApiData
{
    private string _domainName;

    public decimal DA { get; set; }
    public decimal PA { get; set; }
    public decimal MozRank { get; set; }
    public int LinksIn { get; set; }
    public int Equity { get; set; }

    [PrimaryKey]
    [DataMember(Name = "Url")]
    public string DomainName
    {
        get
        {
            return _domainName;
        }
        set
        {
            _domainName = value.ToLower();
        }
    }

}

但是当我使用csv.FromCsv<List<MozApiData>>()时,DomainName属性为null。

我对数据属性有何疑问?

如果我设置了标题映射,它可以工作,但想知道为什么数据注释不起作用。

1 个答案:

答案 0 :(得分:2)

通常[DataMember]属性仅在[DataContract]类型中有效,例如:

[DataContract]
public class MozApiData
{
    private string _domainName;
    [DataMember]
    public decimal DA { get; set; }
    [DataMember]
    public decimal PA { get; set; }
    [DataMember]
    public decimal MozRank { get; set; }
    [DataMember]
    public int LinksIn { get; set; }
    [DataMember]
    public int Equity { get; set; }

    [PrimaryKey]
    [DataMember(Name = "Url")]
    public string DomainName
    {
        get
        {
            return _domainName;
        }
        set
        {
            _domainName = value.ToLower();
        }
    }
}

但是我刚刚在this commit中添加了一个更改,使您可以使用[DataMember(Name = "Url")],而无需将其余类型转换为[DataContract]

此更改从v5.2.1(现在为available on MyGet)可用。