当嵌套对象为 null 时,是否可以在传递给 CsvWriter.WriteRecords() 的对象中写入一个空的 CSV 列?

Is it possible to write an empty CSV column when a nested object is null, within the object passed into CsvWriter.WriteRecords()?

当嵌套对象为空时,是否可以在传入 CsvWriter.WriteRecords() 的对象中写入一个空的 CSV 列?

如果我尝试使用 CsvWriter.WriteRecords() 编写对象,并且对象中的值之一是对象本身并且该对象为空,则不会在该对象的列中写入任何内容。

这是一个例子:

public class AddressObject {
    public string City { get; set; }
    public string Road { get; set; }
    public int RoadNumber { get; set; }
}

public class LocationRow {
    public Guid RowId { get; set; }
    public AddressObject Address { get; set; }
    public double? Latitude { get; set; }
    public double? Longitude { get; set; }
}

因此,当我尝试为 LocationRow 调用 CsvWriter.WriteRecords() 并且 AddressObject 为空时,不会为该对象写入一列:

b9aefb12-feef-47da-cb37-08d6bef08536,-37,175,

但我希望它看起来像:

b9aefb12-feef-47da-cb37-08d6bef08536,,-37,175.

但是如果纬度或经度为空,它将在该列中放置一个空字符串,这正是我所期望的:

b9aefb12-feef-47da-cb37-08d6bef08536,5 Bader St Hamilton,,

我正在为 'AddressObject' class 使用我自己的自定义转换器,但是当它为 null 时,它永远不会使用自定义转换器。

我确实根据您 post 创建了一个示例,如果 AddressObject 为空,此版本可以正确写入 LocationRow 对象。所有空值都替换为空字符串。

在自定义转换器中,如果值为 null,那么我将返回一个空字符串。

public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
  var emptyObj = new AddressObject();
  // if you are reading back the CSV then additional code should be needed here
  return emptyObj;
}

public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
  if (value != null && value is AddressObject)
  {
    var addressObject = value as AddressObject;
    return $"{addressObject.City} {addressObject.Road} {addressObject.RoadNumber}";
  }
  else
  {
    return "";
  }
}

请查看此 github 存储库: https://github.com/bricsi22/csv-helper-example

p.s.: 如果你知道问题出在哪里,请 post 在这个答案下面发表评论,这样社区就可以更有效地使用这个答案。