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

如何从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:37:03