复选框选中项通过Json Writer写入JSON文件异常问题咨询
解决CheckedListBox选中项写入JSON的问题
我来帮你搞定这个问题!你现在遇到的情况是因为CheckedItems是CheckedListBox.CheckedItemCollection类型,直接调用ToString()只会返回这个集合的类型名称,而不是里面的实际选项内容,所以才会输出System.Windows.Forms.CheckedListBox+CheckedItemC...这种结果。
正确的做法分两步:
先提取选中项的实际内容
你需要遍历CheckedItems集合,把每个选中项转换成对应的字符串。如果你的选项都是字符串类型,直接转就行;如果是自定义对象,推荐用GetItemText方法获取控件显示的文本,更可靠:// 提取选中项的文本列表 var selectedItems = ComponentTagsCheckBox.CheckedItems.Cast<object>() .Select(item => ComponentTagsCheckBox.GetItemText(item)) .ToList();用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
相关产品推荐
相关产品推荐

