C# 中 JSON 字符串到 CSV 以及 CSV 到 JSON 的转换

2023-11-23

我正在我的 asp.net Web API 项目中使用 JSON/CSV 文件并尝试使用CSV助手 and ServiceStack.Text库但无法使其工作。

包含数组的 JSON 文件是动态的,并且可以具有任意数量的字段

我使用 Streamreader 读取该文件,然后需要将其转换为 CSV 文件以供最终用户下载。

示例文件文本

[{"COLUMN1":"a","COLUMN2":"b","COLUMN3":"c","COLUMN4":"d","COLUMN5":"e"},
 {"COLUMN1":"a","COLUMN2":"b","COLUMN3":"c","COLUMN4":"d","COLUMN5":"e"}]

JSON 到 CSV

public static string jsonStringToCSV(string content)
{
    var jsonContent = (JArray)JsonConvert.DeserializeObject(content);

    var csv = ServiceStack.Text.CsvSerializer.SerializeToCsv(jsonContent);
    return csv;
}

这不会产生 CSV 数据

enter image description here

然后一些文件是带有逗号或制表符的分隔符类型,我想利用CSV助手将 CSV 字符串动态转换为 IEnumerable

public static IEnumerable StringToList(string data, string delimiter, bool HasHeader)
{
    using (var csv = new CsvReader(new StringReader(data)))
    {
         csv.Configuration.SkipEmptyRecords = true;
         csv.Configuration.HasHeaderRecord = HasHeader;
         csv.Configuration.Delimiter = delimiter;

         var records = csv.GetRecords();
         return records;
     }
}

我能够使用 Json.net 通过 DeserializeObject 到数据表来解决这个问题,所以想发布我自己的答案,但如果有人有更好的方法来做到这一点,我不会将其标记为已接受。

将 JSON 字符串转换为 DataTable

public static DataTable jsonStringToTable(string jsonContent)
        {
            DataTable dt = JsonConvert.DeserializeObject<DataTable>(jsonContent);
            return dt;
        }

制作 CSV 字符串

public static string jsonToCSV(string jsonContent, string delimiter)
        {
            StringWriter csvString = new StringWriter();
            using (var csv = new CsvWriter(csvString))
            {
                csv.Configuration.SkipEmptyRecords = true;
                csv.Configuration.WillThrowOnMissingField = false;
                csv.Configuration.Delimiter = delimiter;

                using (var dt = jsonStringToTable(jsonContent))
                {
                    foreach (DataColumn column in dt.Columns)
                    {
                        csv.WriteField(column.ColumnName);
                    }
                    csv.NextRecord();

                    foreach (DataRow row in dt.Rows)
                    {
                        for (var i = 0; i < dt.Columns.Count; i++)
                        {
                            csv.WriteField(row[i]);
                        }
                        csv.NextRecord();
                    }
                }
            }
            return csvString.ToString();
        }

Web API 中的最终用法

string csv = jsonToCSV(content, ",");

                HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
                result.Content = new StringContent(csv);
                result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv");
                result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "export.csv" };
                return result;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中 JSON 字符串到 CSV 以及 CSV 到 JSON 的转换 的相关文章

随机推荐

  • Three.js - 使用 CubeTextureLoader 在立方体的每个面上创建不同的图像

    我正在尝试使用以下方法创建一个每侧都有不同图像的立方体CubeTextureLoader 我的流程是 使用加载立方体纹理new THREE CubeTextureLoader 使用立方体纹理创建新材质 使用这种材质创建一个立方体 画出立方体
  • JPA 和 Hibernate 中的无符号整数

    我该怎么做才能让 JPA 我使用 Hibernate 创建具有无符号类型的列 目前我的所有 ID 列均已签名 使用columnDefinition财产在 Column注解应该这样做 采取total猜测您要使用的 SQL 类型 private
  • 错误:安装 json 时出错:错误:无法构建 gem 本机扩展

    我正在尝试安装 gem json 并收到 json 错误 我在跑 Windows 8 1 64 位 红宝石 红宝石 1 9 3p545 2014 02 24 i386 mingw32 宝石 1 8 2 D GIT calabash gt g
  • 在 Nodejs 中读取原始 http 消息

    我正在使用 http request 函数发送 http 请求 并且我想读取整个 http 响应 如文本 即原始的 http 协议文本 是否可以 我写了下面的代码 但它不起作用 Set up the request console log
  • 在java中处理四精度浮点数(128位)

    我需要利用来自另一个系统的数字 这些数字是java中的128位 四精度 浮点数 考虑到java中没有等效的类型 我想使用java代码降低数字的精度 以便它们可以存储在java double中 这可以在 c 或使用汇编中相当容易地完成 但我想
  • 我可以将已保存的 R 对象加载到新的对象名称中吗?

    当您使用 R 数据文件保存变量时save 它以保存它的会话中的任何名称保存 当我稍后从另一个会话加载它时 它会以相同的名称加载 加载脚本不可能知道该名称 该名称可能会覆盖加载会话中同名的现有变量 有没有一种方法可以安全地将对象从数据文件加载
  • 从 web.config 读取会员资格部分

    我已经创建了一个自定义成员资格提供程序类 到目前为止一切顺利 但是 我不确定如何从 web config 文件中读取配置设置 我尝试从 Google 和 Stackoverflow 进行搜索 似乎有人也遇到了我的问题 问题并询问 但没有给出
  • Jackson 循环依赖项

    我有一个循环依赖 我现在正在努力解决它 学习这两个课程 出于演示目的删除了样板代码 Class 1 Entity Table name T CREDENTIAL Cache usage CacheConcurrencyStrategy RE
  • strtok 不丢弃换行符

    所以我有一个包含一堆名称和数字的输入文件 我开始使用 strtok 来分解字符串 以便我可以从每个字符串中提取所有数据 一切似乎都工作正常 但由于某种原因 它没有丢弃换行符 int procFile PERSON data FILE fpF
  • onUserInteraction() 到底什么时候被调用?

    在我的应用程序中 我有一个线程每隔 60 秒检查一次来自 Web 服务的数据 在 onCreate 中定义 new Thread new Runnable Override public void run while true try Th
  • TextureView 中的抗锯齿

    我尝试用SurfaceView and a TextureView并注意到用TextureView比使用更多别名 更少 平滑 SurfaceView 这是什么原因呢 有什么办法可以配置渲染TextureView为了看起来更好 The Tex
  • 用于调用 printf 的 C++11 编译时格式字符串文字构造

    我想做的是创建 template
  • javax.mail.AuthenticationFailedException:535 5.0.0 身份验证失败

    我不明白为什么我会得到这个例外 这是尝试发送电子邮件的代码 public void sendAsHotmail final String username jTextField14 getText final String password
  • Kafka Consumer 挂在 java 中的 .hasNext 处

    我有一个简单的 Java Kafka Consumer 代码如下 public void run ConsumerIterator
  • 在 ajax 加载的内容上重新运行应用程序 Javascript

    我希望我的应用程序中的所有 AJAX 加载内容都由我的应用程序 JQuery 脚本进行评估 与正常加载的内容相同 例如JQuery 扫描 AJAX 加载的内容以查找选择器 例如 模式框链接 等 我所有的 JavaScript 都在普通的 d
  • HTML5 / JS 存储事件处理程序

    我正在使用 Safari webkit 的引擎以及 HTML5 和 JS 来创建一个离线应用程序 现在我正在使用sessionStorage数组来存储我的应用程序的状态 模拟 存储数据与检查器一起工作正常 功能工作正常 只是事件处理程序没有
  • 调用 WebMethod,传递 Dictionary 作为参数

    我正在尝试简化将数据从 WebMethod 层返回到客户端的过程 并将来自客户端的参数集表示为Dictionary
  • 从 python 的单词列表中返回一个随机单词

    我想使用 python 从文件中检索随机单词 但我不相信我的以下方法是最好或有效的 请协助 import fileinput import random file line for line in fileinput input etc d
  • PHP 通过 VPN 发布数据

    我需要连接到一个网络服务behind of a VPN通过 PHP 我的服务器是 Debian Linux Squeeze 是否可以在 Linux 上通过 PHP 来完成此任务 如果可以的话这样做会有风险吗 当VPN连接挂起等时 操作系统或
  • C# 中 JSON 字符串到 CSV 以及 CSV 到 JSON 的转换

    我正在我的 asp net Web API 项目中使用 JSON CSV 文件并尝试使用CSV助手 and ServiceStack Text库但无法使其工作 包含数组的 JSON 文件是动态的 并且可以具有任意数量的字段 我使用 Stre