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

复选框选中项通过Json Writer写入JSON文件异常问题咨询

解决CheckedListBox选中项写入JSON的问题

我来帮你搞定这个问题!你现在遇到的情况是因为CheckedItems是CheckedListBox.CheckedItemCollection类型,直接调用ToString()只会返回这个集合的类型名称,而不是里面的实际选项内容,所以才会输出System.Windows.Forms.CheckedListBox+CheckedItemC...这种结果。

正确的做法分两步:

  1. 先提取选中项的实际内容
    你需要遍历CheckedItems集合,把每个选中项转换成对应的字符串。如果你的选项都是字符串类型,直接转就行;如果是自定义对象,推荐用GetItemText方法获取控件显示的文本,更可靠:

    // 提取选中项的文本列表
    var selectedItems = ComponentTagsCheckBox.CheckedItems.Cast<object>()
                              .Select(item => ComponentTagsCheckBox.GetItemText(item))
                              .ToList();
    
  2. 用JsonWriter正确写入数组
    因为items应该是一个JSON数组,而不是直接写入原始字符串。你需要手动开启数组并逐个写入项:

    writer.WritePropertyName("ComponentTags");
    writer.WriteStartObject();
    writer.WritePropertyName("items");
    writer.WriteStartArray(); // 开启JSON数组
    
    foreach (var item in selectedItems)
    {
        writer.WriteValue(item); // 逐个写入选中项文本
    }
    
    writer.WriteEndArray(); // 关闭数组
    writer.WriteEndObject(); // 关闭ComponentTags对象
    

简化写法(用Newtonsoft.Json的JObject)

如果你用的是Newtonsoft.Json,也可以先构建好JObject再写入,代码更简洁:

var selectedItems = ComponentTagsCheckBox.CheckedItems.Cast<object>()
                          .Select(item => ComponentTagsCheckBox.GetItemText(item))
                          .ToList();

var componentTagsObj = new JObject
{
    ["items"] = new JArray(selectedItems)
};

writer.WritePropertyName("ComponentTags");
writer.WriteRawValue(componentTagsObj.ToString());

这样就能得到正确的JSON输出,比如:

"ComponentTags": {
  "items": ["range_close", "component_type_stock"]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:06:06