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

C#如何生成指定结构JSON 将独立Slide字段转换为数组格式

C# 生成指定结构JSON的修改方案

现有问题

当前输出JSON结构

[
   {
      "Vehiclename":"krieger",
      "Price":0,
      "Tank":120,
      "Trunk":100,
      "Speed":300,
      "Image":"krieger/krieger_selection.png",
      "Slide1":"krieger/krieger_side_new.png",
      "Slide2":"krieger/krieger_front_new.png",
      "Slide3":"krieger/krieger_back_new.png"
   }
]

期望输出JSON结构

{
   "Vehiclename":"Krieger",
   "Price":"200000",
   "Tank":"100",
   "Trunk":"50",
   "Speed":"230",
   "Image":"krieger/krieger_selection.png",
   "Slide":[
      "krieger/krieger_side_new.png",
      "krieger/krieger_front_new.png",
      "krieger/krieger_back_new.png"
   ]
}

现有代码

var items = Database.Database.shopVehicleData.Where(x => x.ShopID == 1).Select(x => new
{
    Vehiclename = x.Vehiclename,
    Displayname = x.Displayname,
    Price = x.Price,
    Tank = x.Tank,
    Trunk = x.Trunk,
    Speed = x.Speed,
    Image = x.Image,
    Slide1 = x.Slide_1,
    Slide2 = x.Slide_2,
    Slide3 = x.Slide_3
});

// 数据填充逻辑
while (reader.Read())
{
    int ShopID = reader.GetInt32("ShopID");
    string Vehiclename = reader.GetString("Vehiclename");
    string Displayname = reader.GetString("Displayname");
    int Price = reader.GetInt32("Price");
    int Tank = reader.GetInt32("Tank");
    int Trunk = reader.GetInt32("Trunk");
    int Speed = reader.GetInt32("Speed");
    string Image = reader.GetString("Image");
    string Slide_1 = reader.GetString("Slide_1");
    string Slide_2 = reader.GetString("Slide_2");
    string Slide_3 = reader.GetString("Slide_3");

    shopVehicleData.Add(new ShopVehicleModel(ShopID, Vehiclename, Displayname, Price, Tank, Trunk, Speed, Image, Slide_1, Slide_2, Slide_3));
}     

修改方案

方案1:直接调整LINQ投影逻辑(无需修改模型)

把三个独立的Slide字段替换为数组结构,同时把数值类型转为字符串格式,如需单条数据去掉外层数组包裹,可追加.FirstOrDefault():

// 要保留数组结构就去掉末尾的FirstOrDefault()
var targetData = Database.Database.shopVehicleData.Where(x => x.ShopID == 1).Select(x => new
{
    Vehiclename = x.Vehiclename,
    Displayname = x.Displayname,
    // 数值转字符串和期望格式对齐
    Price = x.Price.ToString(),
    Tank = x.Tank.ToString(),
    Trunk = x.Trunk.ToString(),
    Speed = x.Speed.ToString(),
    Image = x.Image,
    // 合并三个Slide字段为数组
    Slide = new [] { x.Slide_1, x.Slide_2, x.Slide_3 }
}).FirstOrDefault();

直接序列化targetData即可得到目标JSON结构。

方案2:调整模型层(适合长期复用场景)

如果后续经常用到Slide数组,可直接修改ShopVehicleModel类新增数组属性,在数据填充阶段直接赋值:

// 先修改ShopVehicleModel类,新增属性
public List<string> Slide { get; set; }

// 填充数据时直接给数组赋值
while (reader.Read())
{
    // 原有字段读取逻辑不变
    string Slide_1 = reader.GetString("Slide_1");
    string Slide_2 = reader.GetString("Slide_2");
    string Slide_3 = reader.GetString("Slide_3");

    var model = new ShopVehicleModel(ShopID, Vehiclename, Displayname, Price, Tank, Trunk, Speed, Image, Slide_1, Slide_2, Slide_3);
    model.Slide = new List<string> { Slide_1, Slide_2, Slide_3 };
    shopVehicleData.Add(model);
}

后续使用时直接序列化模型对象即可输出目标格式。

内容的提问来源于stack exchange,提问作者iBeiros

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:12:02