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 的列表框显示值的主要内容,如果未能解决你的问题,请参考以下文章