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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:24:04