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

如何拆分多对象JSON并枚举展示服务器配置?

解决方案:将JSON配置转为可枚举项生成服务器卡片

1. 先明确适配的JSON结构(基于你的需求场景)

假设你的JSON文件结构如下(如果和实际有出入,只需对应调整C#模型即可):

{
  "Windows": {
    "Entry": { "CPU": "2核", "RAM": "4GB", "Storage": "50GB", "Price": "$20/月" },
    "Medium": { "CPU": "4核", "RAM": "8GB", "Storage": "100GB", "Price": "$40/月" },
    "High": { "CPU": "8核", "RAM": "16GB", "Storage": "200GB", "Price": "$80/月" }
  },
  "Linux": {
    "Entry": { "CPU": "2核", "RAM": "4GB", "Storage": "60GB", "Price": "$15/月" },
    "Medium": { "CPU": "4核", "RAM": "8GB", "Storage": "120GB", "Price": "$30/月" },
    "High": { "CPU": "8核", "RAM": "16GB", "Storage": "250GB", "Price": "$60/月" }
  }
}

2. 定义C#模型(核心是用Dictionary接收档位,实现可枚举)

把操作系统下的档位改为Dictionary<string, ServerConfig>,这样JSON里的Entry/Medium/High会自动映射为字典的键值对,天然支持枚举:

// 单条服务器配置模型
public class ServerConfig
{
    public string CPU { get; set; }
    public string RAM { get; set; }
    public string Storage { get; set; }
    public string Price { get; set; }
}

// 顶层配置模型
public class ServerPlans
{
    public Dictionary<string, ServerConfig> Windows { get; set; }
    public Dictionary<string, ServerConfig> Linux { get; set; }
}

3. 反序列化JSON并转换为卡片数据

读取JSON文件后反序列化,再把字典转成方便页面遍历的统一卡片模型集合:

using System.Text.Json;
using System.Collections.Generic;

// 读取JSON文件内容
string jsonPath = "server-configs.json";
string jsonContent = File.ReadAllText(jsonPath);

// 反序列化(如果大小写不匹配,可开启忽略大小写)
var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
var serverPlans = JsonSerializer.Deserialize<ServerPlans>(jsonContent, options);

// 定义卡片模型,整合系统类型、档位和配置
public class ServerCard
{
    public string OsType { get; set; } // Windows/Linux
    public string Tier { get; set; } // Entry/Medium/High
    public ServerConfig Config { get; set; }
}

// 生成所有卡片数据
var serverCards = new List<ServerCard>();

// 遍历Windows档位
foreach (var tier in serverPlans.Windows)
{
    serverCards.Add(new ServerCard
    {
        OsType = "Windows",
        Tier = tier.Key,
        Config = tier.Value
    });
}

// 遍历Linux档位
foreach (var tier in serverPlans.Linux)
{
    serverCards.Add(new ServerCard
    {
        OsType = "Linux",
        Tier = tier.Key,
        Config = tier.Value
    });
}

4. 页面生成卡片(以ASP.NET Razor为例)

直接遍历serverCards集合,循环渲染卡片:

<div class="server-cards-grid">
    @foreach (var card in Model.ServerCards)
    {
        <div class="server-card">
            <h2>@card.OsType - @card.Tier</h2>
            <div class="config-item">
                <span class="label">CPU:</span>
                <span class="value">@card.Config.CPU</span>
            </div>
            <div class="config-item">
                <span class="label">内存:</span>
                <span class="value">@card.Config.RAM</span>
            </div>
            <div class="config-item">
                <span class="label">存储:</span>
                <span class="value">@card.Config.Storage</span>
            </div>
            <div class="price">@card.Config.Price</div>
            <button class="order-btn">立即订购</button>
        </div>
    }
</div>

备选方案:如果不想修改原有模型(用反射枚举固定属性)

如果你已经有了固定Entry/Medium/High属性的模型,也可以用反射来枚举这些属性:
假设原有模型:

public class OsTierPlans
{
    public ServerConfig Entry { get; set; }
    public ServerConfig Medium { get; set; }
    public ServerConfig High { get; set; }
}

public class ServerPlans
{
    public OsTierPlans Windows { get; set; }
    public OsTierPlans Linux { get; set; }
}

反射枚举代码:

var serverCards = new List<ServerCard>();

// 处理Windows
var windowsProps = typeof(OsTierPlans).GetProperties();
foreach (var prop in windowsProps)
{
    var config = (ServerConfig)prop.GetValue(serverPlans.Windows);
    serverCards.Add(new ServerCard
    {
        OsType = "Windows",
        Tier = prop.Name,
        Config = config
    });
}

// 处理Linux同理
var linuxProps = typeof(OsTierPlans).GetProperties();
foreach (var prop in linuxProps)
{
    var config = (ServerConfig)prop.GetValue(serverPlans.Linux);
    serverCards.Add(new ServerCard
    {
        OsType = "Linux",
        Tier = prop.Name,
        Config = config
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:05:20