在前后端分离的开发架构中,前端使用JavaScript处理数据,后端使用C#编写业务逻辑是常见组合,当需要将前端生成的JavaScript数组传递到后端并转换为C#数组时,需要遵循跨语言数据交互的规则,避免类型不匹配导致的错误。

基于JSON序列化的通用转换方案
JSON是前后端数据交互最常用的格式,JavaScript数组可以很方便地序列化为JSON字符串,C#端再通过反序列化将JSON字符串转换为对应的数组类型,这是兼容性最好的转换方式。
JavaScript端处理
首先需要将JavaScript数组转换为JSON字符串,然后通过请求传递到后端。如果是基本类型的数组,转换非常简单:
// 定义一个JavaScript字符串数组 let jsStringArray = ["苹果", "香蕉", "橙子"]; // 序列化为JSON字符串 let jsonString = JSON.stringify(jsStringArray); console.log(jsonString); // 输出 ["苹果","香蕉","橙子"] // 如果是数字数组 let jsNumberArray = [10, 20, 30, 40]; let numberJson = JSON.stringify(jsNumberArray); console.log(numberJson); // 输出 [10,20,30,40]
如果是对象类型的JavaScript数组,同样可以通过JSON.stringify完成序列化,只需要保证对象的属性符合JSON格式规范即可。
C#端处理
C#端需要引用处理JSON的相关库,这里以常用的Newtonsoft.Json库为例,首先需要在项目中安装对应的NuGet包,然后编写反序列化代码:
using Newtonsoft.Json;
using System;
class Program
{
static void Main()
{
// 模拟从前端接收到的JSON字符串(字符串数组)
string jsonFromJs = "["苹果","香蕉","橙子"]";
// 反序列化为C#字符串数组
string[] csharpStringArray = JsonConvert.DeserializeObject<string[]>(jsonFromJs);
Console.WriteLine("转换后的C#字符串数组:");
foreach (var item in csharpStringArray)
{
Console.WriteLine(item);
}
// 模拟数字数组的JSON字符串
string numberJsonFromJs = "[10,20,30,40]";
int[] csharpNumberArray = JsonConvert.DeserializeObject<int[]>(numberJsonFromJs);
Console.WriteLine("转换后的C#数字数组:");
foreach (var num in csharpNumberArray)
{
Console.WriteLine(num);
}
}
}
如果是对象类型的数组,需要先定义对应的C#实体类,保证实体类的属性和JavaScript对象的属性名称、类型匹配:
using Newtonsoft.Json;
using System;
// 定义和前端JavaScript对象对应的实体类
public class UserInfo
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main()
{
// 前端传递的对象数组JSON字符串
string userJson = "[{"Name":"张三","Age":20},{"Name":"李四","Age":25}]";
// 反序列化为UserInfo数组
UserInfo[] userArray = JsonConvert.DeserializeObject<UserInfo[]>(userJson);
Console.WriteLine("转换后的用户数组:");
foreach (var user in userArray)
{
Console.WriteLine($"姓名:{user.Name},年龄:{user.Age}");
}
}
}
特殊场景的转换注意事项
在实际开发中,需要注意几个容易出错的场景:
- 数据类型匹配:JavaScript的数字类型没有区分整数和浮点数,而C#的数组类型需要明确指定,比如如果是带小数的数组,反序列化时要使用
double[]而不是int[],否则会出现转换异常。 - 空值处理:JavaScript数组中可能包含null值,C#端对应的引用类型数组可以接收null,但值类型数组如果包含null会抛出异常,需要先做空值校验。
- 日期类型处理:JavaScript的Date对象序列化后会变成字符串,C#端反序列化时需要指定日期格式,避免格式不匹配导致的转换失败。
其他转换方式
如果是同构环境下的转换,比如使用Blazor开发时,JavaScript和C#运行在同一个运行时中,可以通过IJSRuntime直接传递数组,不需要经过JSON序列化:
using Microsoft.JSInterop;
using System.Threading.Tasks;
public class ArrayService
{
private readonly IJSRuntime _jsRuntime;
public ArrayService(IJSRuntime jsRuntime)
{
_jsRuntime = jsRuntime;
}
public async Task GetJsArray()
{
// 直接调用JavaScript方法获取数组,Blazor会自动完成类型转换
string[] result = await _jsRuntime.InvokeAsync<string[]>("getJsStringArray");
}
}
对应的JavaScript方法定义如下:
// 定义返回数组的JavaScript方法
function getJsStringArray() {
return ["测试1", "测试2", "测试3"];
}
这种方式的转换效率更高,但仅适用于Blazor等特殊的开发场景,大部分前后端分离项目还是推荐使用JSON序列化的方式完成转换。
JavaScript C# 数组转换 JSON_serialization修改时间:2026-06-17 02:33:44