如何在C#中将字符串List转为JSON发送至Flask后端?
解决C#发送字符串列表到Python Flask后端的JSON序列化问题
问题原因
你之前使用dynamic+JsonObject的方式容易出现成员未识别错误,因为JsonObject是WPF/UWP专属类型,且动态类型的成员绑定依赖运行时,容易出现匹配问题。推荐使用.NET标准的JSON序列化方案,兼容性更强。
方案1:匿名类型 + System.Text.Json(.NET Core/.NET 5+ 推荐)
直接用匿名对象包装列表,配合内置的System.Text.Json序列化,无需额外安装包:
using System; using System.Collections.Generic; using System.Net.Http; using System.Text.Json; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { // 准备待发送的字符串列表 var stringList = new List<string> { "apple", "banana", "cherry" }; // 包装为带List字段的匿名对象 var requestPayload = new { List = stringList }; // 序列化为JSON字符串 string json = JsonSerializer.Serialize(requestPayload); // 创建符合JSON格式的HttpContent var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); // 发送POST请求到Flask后端 using var client = new HttpClient(); var response = await client.PostAsync("http://localhost:5000/api/receive-list", content); // 处理响应 if (response.IsSuccessStatusCode) { string result = await response.Content.ReadAsStringAsync(); Console.WriteLine("请求成功:" + result); } else { Console.WriteLine($"请求失败,状态码:{response.StatusCode}"); } } }
方案2:强类型DTO类(适合复杂请求场景)
如果需要更规范的代码结构,可定义对应的DTO类,避免动态类型的潜在问题:
// 定义请求数据的DTO类 public class StringListRequest { public List<string> List { get; set; } = new List<string>(); } // 发送请求的代码 var stringList = new List<string> { "apple", "banana", "cherry" }; var requestPayload = new StringListRequest { List = stringList }; string json = JsonSerializer.Serialize(requestPayload); // 后续的HttpContent创建、请求发送步骤和方案1完全一致
Flask后端接收代码
对应后端需要解析JSON请求,示例代码如下:
from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/api/receive-list', methods=['POST']) def receive_string_list(): # 解析JSON请求体 request_data = request.get_json() received_list = request_data.get('List', []) # 处理列表(示例:打印长度) print(f"收到{len(received_list)}条字符串") # 返回响应 return jsonify({"status": "ok", "received_items": received_list}) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True)
内容的提问来源于stack exchange,提问作者yo kl
相关产品推荐
相关产品推荐

