在CsvHelper中,如何将List<string>类型的字段转换为Json类型的字段?
In CsvHelper, how do you convert fields of type List<string> to Json?
假设您有要写入 csv 的数据结构(可能还有其他具有相同类型字段的数据结构):
public class Foo
{
public Dictionary<string, string> Properties { get; set; }
public List<string> Tags { get; set; }
}
如何让 CsvHelper 将这些类型转换为 Json 字符串? (没有写几个 class 地图)
[注意:我自己拼凑了一个解决方案,但想在这里分享]
您可以编写一些辅助方法来读取和写入您的 csv,但是在您将方法调用到 read/write 之前,您需要这样做(使用 nuget 包的 v23.0.0 进行测试):
csv.Context.TypeConverterCache.AddConverter<List<string>>(new JsonConverter<List<string>>());
csv.Context.TypeConverterCache.AddConverter<Dictionary<string,string>>(new JsonConverter<Dictionary<string,string>>());
下面是写入记录的辅助方法示例:
using (var writer = new StreamWriter(outfile, true))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.Context.TypeConverterCache.AddConverter<List<string>>(new JsonConverter<List<string>>());
csv.Context.TypeConverterCache.AddConverter<Dictionary<string,string>>(new JsonConverter<Dictionary<string,string>>());
csv.WriteRecords(yourRecords);
}
你需要添加这个class(这是我从官方文档中找到的):
public class JsonConverter<T> : ITypeConverter
{
public object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
return JsonConvert.DeserializeObject<T>(text);
}
public string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
return JsonConvert.SerializeObject(value);
}
}
参考文献:
https://joshclose.github.io/CsvHelper/examples/configuration/class-maps/type-conversion/
假设您有要写入 csv 的数据结构(可能还有其他具有相同类型字段的数据结构):
public class Foo
{
public Dictionary<string, string> Properties { get; set; }
public List<string> Tags { get; set; }
}
如何让 CsvHelper 将这些类型转换为 Json 字符串? (没有写几个 class 地图)
[注意:我自己拼凑了一个解决方案,但想在这里分享]
您可以编写一些辅助方法来读取和写入您的 csv,但是在您将方法调用到 read/write 之前,您需要这样做(使用 nuget 包的 v23.0.0 进行测试):
csv.Context.TypeConverterCache.AddConverter<List<string>>(new JsonConverter<List<string>>());
csv.Context.TypeConverterCache.AddConverter<Dictionary<string,string>>(new JsonConverter<Dictionary<string,string>>());
下面是写入记录的辅助方法示例:
using (var writer = new StreamWriter(outfile, true))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.Context.TypeConverterCache.AddConverter<List<string>>(new JsonConverter<List<string>>());
csv.Context.TypeConverterCache.AddConverter<Dictionary<string,string>>(new JsonConverter<Dictionary<string,string>>());
csv.WriteRecords(yourRecords);
}
你需要添加这个class(这是我从官方文档中找到的):
public class JsonConverter<T> : ITypeConverter
{
public object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
return JsonConvert.DeserializeObject<T>(text);
}
public string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
return JsonConvert.SerializeObject(value);
}
}
参考文献:
https://joshclose.github.io/CsvHelper/examples/configuration/class-maps/type-conversion/