Cinchoo ETL 序列化 Class 到 csv

Cinchoo ETL serialize Class to csv

尝试将 class 序列化为 csv,我得到:

StationId,Data.Datetime_0,Data.Datetime_1

63,2021-05-04T11:00:00+02:00,

使用包:

public static string StationDetailsCallStringToCSV(StationDetailsCall station)
{
    var csv = new StringBuilder();

    using (var parser = new ChoCSVWriter<StationDetailsCall>(new StringWriter(csv)).WithFirstLineHeader().UseNestedKeyFormat(true))
    {
        parser.Write(station);
    }
    return csv.ToString();     
}

Class (StationDetailsCall):

public class Channel
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("alias")]
    public string Alias { get; set; }

    [JsonProperty("value")]
    public double Value { get; set; }

    [JsonProperty("status")]
    public int Status { get; set; }

    [JsonProperty("valid")]
    public bool Valid { get; set; }

    [JsonProperty("description")]
    public string Description { get; set; }
}

public class Datum
{
    [JsonProperty("datetime")]
    public string Datetime { get; set; }

    [JsonProperty("channels")]
    [Range(0, 3)]
    public Channel[] Channels { get; set; }
}

public class StationDetailsCall: Container
{      
    [JsonProperty("stationId")]
    public int StationId { get; set; }

    [JsonProperty("data")]
    [Range(0, 1)]
    public Datum[] Data { get; set; }
}

问题出在 csv 结果中,class Datum 中的数组通道没有被序列化

我做错了什么?

您可以先将数据转换为 json,然后再将其转换为 csv,然后将 json 数据转换为 csv

StationDetailsCall station = new StationDetailsCall();
station.StationId = 1;
station.Data = new Datum[] { 
     new Datum() { Channels = new Channel[] { new Channel() { Id = 1, Name = "name1" }, new Channel() { Id = 2, Name = "name2" } }, Datetime = DateTime.Now.ToString() },
     new Datum() { Channels = new Channel[] { new Channel() { Id = 3, Name = "name3" }, new Channel() { Id = 4, Name = "name4" } }, Datetime = DateTime.Now.ToString() },
};
string result = StationDetailsCallStringToCSV(station);

StationDetailsCallStringToCSV 方法

public static string StationDetailsCallStringToCSV(StationDetailsCall station)
{
    var csv = new StringBuilder();
    string json = JsonConvert.SerializeObject(station);
    using (var r = ChoJSONReader.LoadText(json))
    {
        using (var w = new ChoCSVWriter(csv).WithFirstLineHeader().UseNestedKeyFormat(true).ThrowAndStopOnMissingField(false))
        {
           w.Write(r);
        }
    }
    Console.WriteLine(csv.ToString());
    return csv.ToString();
}