Newtonsoft JToken 的列表框显示值

Posted

技术标签:

【中文标题】Newtonsoft JToken 的列表框显示值【英文标题】:Listbox DisplayValue for Newtonsoft JToken 【发布时间】:2021-12-26 23:25:23 【问题描述】:

我有一个列表(来自 Newtonsoft),我正在尝试为 Microsoft .NET 列表框定义一个 DisplayValue。

List<JToken> gCollectionRequests = new List<JToken>();
//Code here to create a valid gCollectionRequests
listBox1.DataSource = gCollectionRequests;
listBox1.DisplayMember = gCollectionRequests[0]["name"].Value<string>();

列表基于 JSON Postman 集合文件,其第一个字段是“名称”。这就是我想要展示的。上面这行代码并没有破坏代码,只是没有任何作用。

gCollectionRequests 的一个例子:

从 List 源定义 DisplayValue 的正确方法是什么?

【问题讨论】:

您能否更新您的帖子以包含一个包含您的 json 的简单示例,以便我们进一步帮助您? @zaggler 示例已添加。 如果可能,请添加代码,而不仅仅是图片。 要使DisplayMember 工作,您需要提供一个属性名称。但是,JToken 显然没有属性name。您需要自己的类型和所需的属性来绑定它。 【参考方案1】:

谢谢,@SriramSakthivel。那是关键。所以我创建了一个包含我的 JSON 集合的新对象。你会这样做吗?

public class CombinedJTokens

    private int RequestCount; //Not really needed.
    public JToken MyRequest;

    public CombinedJTokens(int myCount, JToken myToken)
    
        this.RequestCount = myCount;
        this.MyRequest = myToken;
    

    public string DisplayName
    
        get  return string.Format("This is a JToken: 0", MyRequest["name"].Value<string>()); 
    

然后,这处理填充列表框:

private void FillInListBoxWithRequests()

     List<CombinedJTokens> myCombinedTokensList = new List<CombinedJTokens>();
     int theCount = 0;
     foreach (var item in gCollectionRequests)
     
          JToken myNewJToken = item;
          CombinedJTokens myCombinedJTokens = new CombinedJTokens(++theCount, item);
          myCombinedTokensList.Add(myCombinedJTokens);
     
     listBox1.DataSource = null;
     listBox1.DataSource = myCombinedTokensList;
     listBox1.DisplayMember = "DisplayName";

gCollectionRequests 是 JSON 请求的列表,定义为:

List<JToken> gCollectionRequests = new List<JToken>();

【讨论】:

以上是关于Newtonsoft JToken 的列表框显示值的主要内容,如果未能解决你的问题,请参考以下文章

JsonResult(object) 导致“不支持集合类型'Newtonsoft.Json.Linq.JToken'。”

无法将类型“newtonsoft.json.linq.jtoken”隐式转换为 newt“newtonsoft.json.linq.jvalue”

从 JSON 检索项目时获取“无法将 Newtonsoft.Json.Linq.JObject 转换为 Newtonsoft.Json.Linq.JToken”

C# Newtonsoft.Json解析json字符串处理 - JToken 用法

LINQ to Entities 无法识别方法 'Newtonsoft.Json.Linq.JToken get_Item(System.String)' 方法,

没有服务参考的项目。错误:类型“Newtonsoft.Json.Linq.JToken”是一个不受支持的递归收集数据协定。