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
相关产品推荐
相关产品推荐

