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

如何为绑定Newtonsoft JToken列表的.NET ListBox设置DisplayMember

问题原因

DisplayMember属性需要传入的是绑定数据源中每个元素要展示的属性名称,而非属性的实际值。你当前的代码是取出了第一个JToken元素的name字段值作为DisplayMember,等于让ListBox去每个JToken对象上找和这个值同名的属性,自然找不到对应的内容。
此外JToken属于动态JSON对象,其字段不是.NET类的常规属性,就算你直接把DisplayMember设为字符串"name",默认的数据绑定逻辑也无法直接读取到对应的字段值。

正确实现方式

有两种常用的实现方案:

方案1:使用Format事件自定义展示内容(无需修改数据源)

直接绑定原List<JToken>集合,通过订阅ListBox的Format事件,手动指定每个条目的展示内容:

List<JToken> gCollectionRequests = new List<JToken>();
// 原有创建gCollectionRequests的代码不变

listBox1.DataSource = gCollectionRequests;
// 订阅Format事件处理展示逻辑
listBox1.Format += (sender, e) =>
{
    if (e.ListItem is JToken token)
    {
        e.Value = token["name"]?.ToString() ?? string.Empty;
    }
};

方案2:转换为强类型集合后绑定(更易维护)

先定义和Postman请求结构对应的强类型类,把JToken集合转成强类型集合后再绑定,后续操作更方便:

  1. 定义实体类
public class PostmanRequestItem
{
    public string Name { get; set; }
    // 可根据需要补充其他需要用到的字段
}
  1. 转换集合并绑定
var bindList = gCollectionRequests.Select(token => new PostmanRequestItem
{
    Name = token["name"]?.Value<string>() ?? string.Empty
}).ToList();

listBox1.DataSource = bindList;
listBox1.DisplayMember = nameof(PostmanRequestItem.Name);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:45:00