【问题标题】:Is is possible to serialize fields (not just properties) with CsvHelper?是否可以使用 CsvHelper 序列化字段(不仅仅是属性)?
【发布时间】:2013-12-05 19:55:56
【问题描述】:

我正在使用CsvHelper,但我希望能够序列化字段而不仅仅是属性。有没有办法做到这一点?

请注意,这很难搜索,因为文档使用“字段”一词来表示类属性,但我说的是实际的类字段,即该类中的MyIntField

class Something
{
    public int MyIntProperty {get; set;}
    public int MyIntField;
}

【问题讨论】:

    标签: .net csvhelper


    【解决方案1】:

    不,目前不可能。您收到一条错误消息

    'MyIntField' is not a property. Did you try to map a field by accident?

    【讨论】:

    • 如果你想故意映射一个字段怎么办?我发现我有很多简单的类,这些类在历史上不需要任何类型的序列化,并且将它们定义为字段更容易,因为它的输入少了一点。但是现在我确实想序列化它们,CsvHelper 看不到它们。我可以轻松地返回并将它们全部设为属性,但这有点乏味,特别是因为我没有遇到编译器错误,只有运行时错误。
    • 我认为不可能有像泛型类型那样的 lambda 表达式约束。不过那真的很好。使用自动属性,您只需将{ get; set; } 添加到每个字段的末尾即可使其成为属性。如果您想要一个配置选项让它也查看字段,请向 github 项目添加一个问题。它不存在的原因是使用属性而不是字段是一种很好的做法。通常,人们不希望他们的字段被使用。
    • 我将不得不考虑是要迁移到属性,还是坚持使用字段。我认为,如果您只想要一个除了 get 和 set 之外没有其他逻辑的公共数据,那么字段非常方便,我喜欢使用它们。但是添加额外的字符也没什么大不了的。
    • 您会重新考虑添加对字段的支持吗?尽管在这些情况下最好使用属性,但当现有工具或库使用字段(例如,LINQPad 及其 SQL 实体)时,它并没有帮助。必须创建一个包装类,当有许多列和表要映射时可能会很麻烦。当它应该是微不足道的时候,这是很多工作。
    • 是的。这是一个将完成的功能请求。 github.com/JoshClose/CsvHelper/issues/416
    猜你喜欢
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多