【问题标题】:Listbox DisplayValue for Newtonsoft JTokenNewtonsoft 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。您需要自己的类型和所需的属性来绑定它。

标签: c# winforms json.net listbox


【解决方案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>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 2013-01-01
    相关资源
    最近更新 更多