【问题标题】:Importing CSV file in MVC and converting it in JSON using C#在 MVC 中导入 CSV 文件并使用 C# 将其转换为 JSON
【发布时间】:2017-08-31 14:04:27
【问题描述】:

我正在将 .CSV 文件从 Angular 应用程序导入到 MVC 中,并且我能够获得这样的文件

Int32 strLen, strRead;
            System.IO.Stream stream = Request.InputStream;
            strLen = Convert.ToInt32(stream.Length);
            byte[] strArr = new byte[strLen];
            strRead = stream.Read(strArr, 0, strLen);

这里正在导入的文件被转换为 byte[] 因为我正在使用

读取文件

System.IO.Stream 流 = Request.InputStream

然后我把它转换成这样的字符串

 string a = System.Text.Encoding.UTF8.GetString(strArr);

并尝试拆分内容并检索数据,但它变得非常复杂,我想知道是否有任何替代方法。在这样一个简单的 .CSV 文件中

将 byte[] 转换为这样的字符串后得到结果

一旦我应用逻辑来分割字符串和检索数据,逻辑就会变得像这样非常混乱

是否有任何有效的方法可以将导入的 .CSV 文件转换为 JSON

【问题讨论】:

  • 你需要解析CSV,你可以使用CSVHelper然后你只需要一个JSON序列化器
  • 我没有从文件位置读取文件,我正在使用 input type='file' 按钮从 HTML 页面导出 .CSV 文件,我将文件作为流获取
  • stream 只是内存中的一个文件,CSVHelper 读取没有问题
  • 我没有发现 CSVHelper 中的流有任何过载,我得到 System.IO.TextReader 的过载,你能帮忙

标签: json c#-4.0 split import-csv


【解决方案1】:

Save stream as text file 进入 TEMP 文件夹。

使用任何 parcer 处理 CSV 文件。 (例如FileHelpers

使用任何 Json 助手将其转换为输出格式。 (例如:newtonsoft

【讨论】:

  • 我不想将文件保存在任何文件夹中,因为我有访问客户端环境中任何文件的权限问题
  • @LijinDurairaj 您是否尝试访问 System.IO.Path.GetTempPath() ?至少您可以访问构建放置的 IIS 工作文件夹
  • 其实我根本不想把文件放在文件夹里
  • @LijinDurairaj 在任何情况下,在您的 parcing 开始之前,程序都会从​​头到尾读取所有流,因此如果流使用没有文件,则没有性能利润,但取决于您 :)
【解决方案2】:

您可以使用Cinchoo ETL - 一个开源库,轻松将 CSV 转换为 JSON。

using (var parser = new ChoCSVReader("IgnoreLineFile1.csv")
    .WithField("PolicyNumber", 1)
    .WithField("VinNumber", 2)
    .Configure(c => c.IgnoreEmptyLine = true)
    .Configure(c => c.ColumnCountStrict = true)
    )
{
    using (var writer = new ChoJSONWriter("ignoreLineFile1.json")
            .WithField("PolicyNumber", fieldName: "Policy Number")
            .WithField("VinNumber", fieldName: "Vin Number")
        )
        writer.Write(parser.Skip(1));
}

在上面,您也可以根据需要将流传递给读取器和写入器。

希望这会有所帮助。

免责声明:我是这个库的作者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2014-11-23
    • 2015-10-18
    • 2014-10-02
    • 1970-01-01
    • 2017-07-11
    相关资源
    最近更新 更多