You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core中JSON转CSV及向Python API传递CSV字符串为文件的实现方案

解决方案:JSON转CSV并传递给Python文件API

一、C#中将JSON字符串转换为CSV字符串

推荐使用CsvHelper + Newtonsoft.Json(或System.Text.Json)处理,这两个是.NET生态中处理CSV和JSON的常用工具,能高效处理格式转换,避免手动拼接CSV的繁琐与错误。

实现步骤:

  1. 安装NuGet包:

    • Newtonsoft.Json:Install-Package Newtonsoft.Json
    • CsvHelper:Install-Package CsvHelper
  2. 强类型JSON转CSV代码示例(适用于结构固定的JSON):

    using Newtonsoft.Json;
    using CsvHelper;
    using System.IO;
    using System.Globalization;
    using System.Collections.Generic;
    
    // 定义与JSON结构匹配的实体类(根据实际JSON调整字段)
    public class DataItem
    {
        public int Id { get; set; }
        public string Username { get; set; }
        public string Email { get; set; }
        public decimal Score { get; set; }
    }
    
    public string JsonToCsv(string jsonString)
    {
        // 反序列化JSON为对象列表
        var dataList = JsonConvert.DeserializeObject<List<DataItem>>(jsonString);
    
        // 生成CSV字符串
        using var writer = new StringWriter();
        using var csvWriter = new CsvWriter(writer, CultureInfo.InvariantCulture);
        
        csvWriter.WriteRecords(dataList);
        return writer.ToString();
    }
    
  3. 动态JSON转CSV代码示例(适用于结构不固定的JSON):

    using Newtonsoft.Json;
    using CsvHelper;
    using System.IO;
    using System.Globalization;
    using System.Collections.Generic;
    using System.Dynamic;
    
    public string DynamicJsonToCsv(string jsonString)
    {
        var dynamicData = JsonConvert.DeserializeObject<List<ExpandoObject>>(jsonString);
        using var writer = new StringWriter();
        using var csvWriter = new CsvWriter(writer, CultureInfo.InvariantCulture);
    
        if (dynamicData.Any())
        {
            // 提取表头(从第一个对象的键中获取)
            var headers = ((IDictionary<string, object>)dynamicData.First()).Keys;
            foreach (var header in headers)
            {
                csvWriter.WriteField(header);
            }
            csvWriter.NextRecord();
    
            // 逐行写入数据
            foreach (var item in dynamicData)
            {
                var itemDict = (IDictionary<string, object>)item;
                foreach (var header in headers)
                {
                    csvWriter.WriteField(itemDict.TryGetValue(header, out var value) ? value : null);
                }
                csvWriter.NextRecord();
            }
        }
        return writer.ToString();
    }
    

二、将CSV字符串以文件形式传递给Python API

Python服务通常通过multipart/form-data格式接收文件上传,在C#中可以用HttpClient将CSV字符串包装成文件流,模拟真实的文件上传请求。

实现步骤:

using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

public async Task<string> SendCsvAsFileToPython(string csvString, string apiEndpoint)
{
    using var httpClient = new HttpClient();
    using var formContent = new MultipartFormDataContent();

    // 将CSV字符串转为字节数组,创建流内容
    var csvBytes = Encoding.UTF8.GetBytes(csvString);
    using var streamContent = new ByteArrayContent(csvBytes);
    
    // 设置内容类型为text/csv
    streamContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/csv");
    // 添加到form-data,参数名需与Python服务接收的参数一致(比如Python端用request.files['file'],这里就填"file")
    formContent.Add(streamContent, "file", "uploaded_data.csv");

    // 发送POST请求
    var response = await httpClient.PostAsync(apiEndpoint, formContent);
    response.EnsureSuccessStatusCode(); // 抛出请求失败的异常

    // 返回API响应内容
    return await response.Content.ReadAsStringAsync();
}

配套Python服务接收示例(Flask框架)

如果需要验证对接逻辑,Python端可以用如下代码接收文件:

from flask import Flask, request
import pandas as pd

app = Flask(__name__)

@app.route('/process-csv', methods=['POST'])
def process_csv():
    if 'file' not in request.files:
        return "未检测到文件", 400
    
    file = request.files['file']
    # 读取CSV内容
    df = pd.read_csv(file)
    # 这里添加你的业务处理逻辑
    return f"成功处理{len(df)}条数据", 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

完整流程调用示例

public async Task RunFullWorkflow(string jsonInput, string pythonApiUrl)
{
    // 1. JSON转CSV字符串
    var csvStr = JsonToCsv(jsonInput);
    // 2. 发送CSV到Python API
    var apiResponse = await SendCsvAsFileToPython(csvStr, pythonApiUrl);
    // 3. 处理响应
    Console.WriteLine("Python API响应:" + apiResponse);
}

内容的提问来源于stack exchange,提问作者Dipayita Basu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:16:29