将动态 Dapper 结果序列化为 CSV
Serialize dynamic Dapper result to CSV
我正在尝试使用 ServiceStack.Text 将动态 Dapper 结果序列化为 CSV,但我得到了一组换行符。根据 ServiceStack.Text,它可以处理匿名和 IDictionary<string, object>
类型。
using (var conn = new SqlConnection(...))
{
var data = conn.Query("select * from data");
var output = CsvSerializer.SerializeToCsv(data);
Console.WriteLine(output);
Console.Read();
}
当我使用相同的类型时,它有效。
IEnumerable<dynamic> list = new List<dynamic>
{
new
{
Name = "Nathan",
Id = 1,
Created = DateTime.UtcNow
}
};
Console.WriteLine(CsvSerializer.SerializeToString(list));
Console.Read();
关于 Dapper 的 return 类型,我错过了什么?
我知道我可以通过投影到模型 class 来解决这个问题,但我的方法的优点在于动态的使用。我有什么选择吗?
Dapper 的 Query
方法 returns IEnumerable<dynamic>
,基本上是:IEnumerable<object>
- 每行恰好实现 IDictionary<string,object>
。我想知道 SS 是否正在寻找 T
是 IEnumerable<T>
:在这种情况下,是的,那将无法正常工作。你可以试试:
var typed = data.Select(x => (IDictionary<string,object>)typed);
var output = CsvSerializer.SerializeToCsv(typed);
这会在投影中进行转换,因此如果 SerializeToCsv
是通用方法,它将知道接口支持。
Dapper 没有 return 匿名类型。
像 Dapper returns 这样的动态 Generic IDictionary 现在应该得到支持 from this commit。
此更改适用于 v4.0.43+,即现在 available on MyGet。
我正在尝试使用 ServiceStack.Text 将动态 Dapper 结果序列化为 CSV,但我得到了一组换行符。根据 ServiceStack.Text,它可以处理匿名和 IDictionary<string, object>
类型。
using (var conn = new SqlConnection(...))
{
var data = conn.Query("select * from data");
var output = CsvSerializer.SerializeToCsv(data);
Console.WriteLine(output);
Console.Read();
}
当我使用相同的类型时,它有效。
IEnumerable<dynamic> list = new List<dynamic>
{
new
{
Name = "Nathan",
Id = 1,
Created = DateTime.UtcNow
}
};
Console.WriteLine(CsvSerializer.SerializeToString(list));
Console.Read();
关于 Dapper 的 return 类型,我错过了什么?
我知道我可以通过投影到模型 class 来解决这个问题,但我的方法的优点在于动态的使用。我有什么选择吗?
Dapper 的 Query
方法 returns IEnumerable<dynamic>
,基本上是:IEnumerable<object>
- 每行恰好实现 IDictionary<string,object>
。我想知道 SS 是否正在寻找 T
是 IEnumerable<T>
:在这种情况下,是的,那将无法正常工作。你可以试试:
var typed = data.Select(x => (IDictionary<string,object>)typed);
var output = CsvSerializer.SerializeToCsv(typed);
这会在投影中进行转换,因此如果 SerializeToCsv
是通用方法,它将知道接口支持。
Dapper 没有 return 匿名类型。
像 Dapper returns 这样的动态 Generic IDictionary 现在应该得到支持 from this commit。
此更改适用于 v4.0.43+,即现在 available on MyGet。