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();
}
尝试将 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();
}