如何从C#应用向Node.js应用传递JSON对象
最简方案推荐:C#生成JSON给Node.js消费
嘿,这个需求其实有几个超轻量的实现方式,我按「从易到难、配置从简到繁」给你列出来,你可以根据自己的部署场景挑最适合的:
1. 本地/共享文件读写(绝对最简,零额外服务)
如果你的C#和Node.js程序运行在同一台机器或者能访问同一个共享文件夹,这个方案是首选——不用搞任何网络服务,直接通过文件传递JSON。
C# 侧代码(生成并写入JSON文件)
用.NET自带的System.Text.Json序列化对象后写入文件:
using System.Text.Json; using System.IO; // 模拟你生成的JSON对象 var yourData = new { Id = 123, Content = "来自C#的内容", Timestamp = DateTime.UtcNow }; // 序列化并写入文件(路径可以是本地文件夹或共享目录) var jsonString = JsonSerializer.Serialize(yourData, new JsonSerializerOptions { WriteIndented = true }); File.WriteAllText(@"C:\SharedData\app-data.json", jsonString);
Node.js 侧代码(读取/监听文件)
用Node.js原生fs模块读取,或者用chokidar监听文件变化实现实时更新:
const fs = require('fs'); const path = require('path'); // 一次性读取数据 const readJsonData = () => { try { const rawData = fs.readFileSync(path.join(__dirname, '../SharedData/app-data.json'), 'utf8'); return JSON.parse(rawData); } catch (err) { console.error('读取JSON文件出错:', err); return null; } }; console.log('当前数据:', readJsonData()); // 可选:实时监听文件变化(先安装chokidar:npm install chokidar) const chokidar = require('chokidar'); chokidar.watch(path.join(__dirname, '../SharedData/app-data.json')) .on('change', () => { console.log('数据更新了:', readJsonData()); });
2. 轻量HTTP接口(跨机器场景首选)
如果两个程序不在同一机器,或者需要更实时的交互,用ASP.NET Core的Minimal API快速搭一个HTTP接口,Node.js直接通过HTTP请求获取JSON——配置超简单,几行代码就能搞定服务器。
C# 侧代码(启动Minimal API)
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); // 暴露一个GET接口返回JSON数据 app.MapGet("/api/get-data", () => { // 这里替换成你实际生成的JSON对象 var yourData = new { Id = 123, Content = "来自C#接口的内容", Timestamp = DateTime.UtcNow }; return Results.Json(yourData); }); // 启动服务,监听5000端口 app.Run("http://0.0.0.0:5000");
Node.js 侧代码(请求接口)
用axios或者Node.js 18+自带的fetch发起请求:
// 用fetch的话(Node.js 18+无需额外安装) fetch('http://your-csharp-server-ip:5000/api/get-data') .then(res => res.json()) .then(data => console.log('从C#接口拿到的数据:', data)) .catch(err => console.error('请求出错:', err)); // 或者用axios(需要先安装:npm install axios) const axios = require('axios'); axios.get('http://your-csharp-server-ip:5000/api/get-data') .then(res => console.log('从C#接口拿到的数据:', res.data)) .catch(err => console.error('请求出错:', err));
3. 轻量消息队列(解耦/高并发场景)
如果你的场景需要解耦两个程序(比如C#生成数据的频率很高,Node.js需要实时接收),可以用Redis的Pub/Sub或者RabbitMQ——这个比前两个稍微复杂一点,但配置也很轻量。
举个Redis Pub/Sub的例子:
C# 侧(发布消息)
using StackExchange.Redis; using System.Text.Json; var redis = ConnectionMultiplexer.Connect("your-redis-server-ip:6379"); var db = redis.GetDatabase(); var yourData = new { Id = 123, Content = "来自C#的消息" }; var jsonString = JsonSerializer.Serialize(yourData); // 发布到指定频道 db.Publish("csharp-data-channel", jsonString);
Node.js 侧(订阅消息)
const redis = require('redis'); const subscriber = redis.createClient({ url: 'redis://your-redis-server-ip:6379' }); subscriber.on('message', (channel, message) => { const data = JSON.parse(message); console.log('收到C#的消息:', data); }); // 订阅频道 subscriber.subscribe('csharp-data-channel');
总结一下:
- 同一机器/共享目录:选文件读写,零配置最简;
- 跨机器/需要实时交互:选HTTP接口,几行代码搭服务;
- 需要解耦/高并发:选轻量消息队列。
内容的提问来源于stack exchange,提问作者Joezer
相关产品推荐
相关产品推荐

