当嵌套对象为 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 在这个答案下面发表评论,这样社区就可以更有效地使用这个答案。
当嵌套对象为空时,是否可以在传入 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 在这个答案下面发表评论,这样社区就可以更有效地使用这个答案。