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

Datamember name not working when deserializing

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

这是我的class。

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 属性 为空。

我对数据属性做错了什么?

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

通常 [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]

此更改适用于现在 available on MyGet 的 v5.2.1。