C#使用JavaScriptSerializer将OrderStatus类序列化为指定结构JSON的方法
C# 序列化OrderStatus集合为指定JSON结构的实现方法
你当前直接序列化集合得到的是数组结构,不符合要求的对象结构,核心解决思路是先将List<OrderStatus>集合转换为以statusNo字段值为键的字典结构,再执行序列化即可。
方案1:继续使用JavaScriptSerializer实现
第一步:转换集合为字典结构
如果不想修改原有OrderStatus类,可以直接构造匿名类过滤掉不需要输出的statusNo字段:
// 假设你的OrderStatus实例集合为 List<OrderStatus> orderStatusList var serializeDict = orderStatusList.ToDictionary( status => status.statusNo.ToString(), status => new { status.icon, status.title, status.message, status.description } );
如果可以修改OrderStatus类,给statusNo属性添加[ScriptIgnore]标记,就不需要每次构造匿名类:
using System.Web.Script.Serialization; public class OrderStatus { public string title { get; set; } [ScriptIgnore] public int statusNo { get; set; } public string description { get; set; } public string message { get; set; } public string icon { get; set; } } // 转字典时代码可简化为 var serializeDict = orderStatusList.ToDictionary(status => status.statusNo.ToString(), status => status);
第二步:执行序列化
string resultJson = new JavaScriptSerializer().Serialize(serializeDict);
方案2:使用Newtonsoft.Json(Json.NET)实现
这是.NET生态更常用的序列化库,实现逻辑和上述一致:
如果修改OrderStatus类,给statusNo加[JsonIgnore]标记:
using Newtonsoft.Json; public class OrderStatus { public string title { get; set; } [JsonIgnore] public int statusNo { get; set; } public string description { get; set; } public string message { get; set; } public string icon { get; set; } }
序列化代码:
var serializeDict = orderStatusList.ToDictionary(status => status.statusNo.ToString(), status => status); // 加Formatting.Indented可以生成带缩进的格式化JSON,和你给出的目标结构格式一致 string resultJson = JsonConvert.SerializeObject(serializeDict, Formatting.Indented);
方案3:使用System.Text.Json实现
适用于.NET Core 3.0+、.NET 5+版本的自带序列化库:
给statusNo加[JsonIgnore]标记:
using System.Text.Json.Serialization; public class OrderStatus { public string title { get; set; } [JsonIgnore] public int statusNo { get; set; } public string description { get; set; } public string message { get; set; } public string icon { get; set; } }
序列化代码:
var serializeDict = orderStatusList.ToDictionary(status => status.statusNo.ToString(), status => status); string resultJson = JsonSerializer.Serialize(serializeDict, new JsonSerializerOptions { WriteIndented = true });
内容的提问来源于stack exchange,提问作者Mohamed Moqbel
相关产品推荐
相关产品推荐

