如何用JSON简单传输二维数组?适配.NET C#后端场景
二维棋盘数组JSON传输及.NET控制器接收方案
JSON格式错误原因
你提供的示例JSON不符合语法规范:board 字段仅绑定了第一行的数组,后续的行数组直接写在了外层JSON对象中,属于无属性键的非法结构,所以无法被正常解析。
全量棋盘传输实现方案
正确的二维数组JSON结构
标准JSON支持二维数组格式,10x10的棋盘可以按如下结构编写,无需手动拆分每个单元格:
{ "board": [ ["red", "black", null, /* 第0行剩余9个元素 */], [null, "black", null, /* 第1行剩余9个元素 */], /* 剩余8行的数组 */ ] }
.NET控制器接收配置
ASP.NET Core 自带的序列化组件(System.Text.Json/Newtonsoft.Json)都支持二维数组的自动绑定,你只需要定义对应结构的接收模型即可:
// 接收请求的视图模型 public class BoardUpdateRequest { public string[][] Board { get; set; } } // 控制器接口 [HttpPost("update-board")] public async Task<IActionResult> UpdateBoard([FromBody] BoardUpdateRequest request) { // 直接按C#二维数组的用法取值即可 var targetCell = request.Board[0][0]; // 对应示例中的"red" // 后续处理业务逻辑、持久化游戏状态 return Ok(); }
前端自动生成JSON
完全不需要手动拼写大棋盘的JSON内容,前端直接操作JS二维数组,调用JSON.stringify即可自动生成符合要求的序列化结果:
// 初始化10x10空棋盘 const gameBoard = Array(10).fill(null).map(() => Array(10).fill(null)) // 正常执行落子逻辑 gameBoard[2][1] = "black" // 直接序列化提交 const requestBody = JSON.stringify({ board: gameBoard }) // 调用接口提交即可
优化方案:增量更新
你提到的仅传输落子变更的方案效率更高,适合线上生产场景,仅需传递坐标和棋子信息即可:
{ "gameId": 1001, "x": 2, "y": 1, "chessColor": "black" }
后端拿到参数后直接更新对应游戏的棋盘指定位置即可,传输体积比全量传输小90%以上,同时也能避免大数组序列化/反序列化的性能损耗。
内容的提问来源于stack exchange,提问作者Tanner Causey
相关产品推荐
相关产品推荐

