c# - 将动态 Dapper 结果序列化为 CSV

标签 c# csv dynamic servicestack dapper

我正在尝试使用 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 的返回类型,我缺少什么?

我知道我可以通过投影到模型类来解决这个问题,但我的方法的优点在于动态的使用。我有什么选择吗?

最佳答案

Dapper 的 Query方法返回 IEnumerable<dynamic> ,基本上是:IEnumerable<object> - 每行恰好实现了 IDictionary<string,object> .我想知道 SS 是否正在寻找 TIEnumerable<T> : 在这种情况下,是的,那将无法正常工作。你可以试试:

var typed = data.Select(x => (IDictionary<string,object>)typed);
var output = CsvSerializer.SerializeToCsv(typed);

这会在投影中进行转换,所以如果 SerializeToCsv是一个泛型方法,它会知道接口(interface)支持。

Dapper 不返回匿名类型。

关于c# - 将动态 Dapper 结果序列化为 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32221543/

相关文章:

c# - 如何在 C# 中全局定义常量(如 DEBUG)

python - 在 csv.reader 中获取原始行?

powershell - 如何获取 CSV 中标题的值

javascript - Vue.js 编辑动态组件中的变量

android - 在 Android 上动态添加 TextView 到 ScrollView

java - .NET 中的 POST 多部分/混合

c# - 同时检查多个 URL 的页面加载时间

csv - 在 Create React App 中导入 .csv 文件时出现 "Cannot find module"

c++ - 在不使用动态内存分配的情况下声明可变大小的数组

c# - 如何使用 Roslyn 执行反射操作