JSON 到 Devexpress Winforms LookUpEdit 控件
JSON to Devexpress Winforms LookUpEdit Control
我的JSON文件内容是这样的:
{
01: "One",
02: "Two",
03: "Three",
04: "Four",
05: "Five",
06: "Six",
07: "Seven",
08: "Eight",
09: "Nine",
10: "Ten"
}
我正在使用 Newtonsoft.Json
库。我这样试过:
var json = File.ReadAllText(@"numbers.json");
var array = JObject.Parse(json);
lookUpEdit1.Properties.DropDownRows = array.Count > 10 ? 10 : array.Count;
lookUpEdit1.Properties.DisplayMember = "Key";
lookUpEdit1.Properties.ValueMember = "Value";
lookUpEdit1.Properties.DataSource = array.ToList();
lookUpEdit1.Properties.Columns.Add(new LookUpColumnInfo("Key"));
它给出这样的错误:'JObject' does not contain a definition for 'ToList' and no extension method 'ToList' accepting a first argument of type 'JObject' could be found (are you missing a using directive or an assembly reference?)
如何从 JSON 中获取 Devexpress Winforms LookUpEdit
文件?
从 Documentation 开始,您需要数据源是实现 System.Collections.IList
或 System.ComponentModel.IListSource
接口的任何对象。这对您实际希望如何将 JSON 对象转换为列表提出了挑战。例如,您如何称呼您的钥匙(“01”、“02”、...)?你确定 JSON 的格式正确吗(01
而不是 "01"
)?
以下是如何使用 IList 接口将 JSON 对象转换为对象。
using System;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
public class Program
{
public static void Main()
{
string json = @"
{
'01':'One',
'02':'Two',
'03':'Three',
'04':'Four',
'05':'Five',
'06':'Six',
'07':'Seven',
'08':'Eight',
'09':'Nine',
'10':'Ten'
}";
JObject o = JObject.Parse(json);
NumberObject zero = new NumberObject("00", "zero");
List<NumberObject> list = new List<NumberObject>();
foreach (JProperty p in o.Properties())
{
NumberObject num = new NumberObject(p.Name, (string)p.Value);
list.Add(num);
}
// now list can be used as your data source as it is of type List<NumberObject>
}
}
public class NumberObject
{
public string Name {get; set;}
public string Value {get; set;}
public NumberObject(string numName, string numValue)
{
Name = numName;
Value = numValue;
}
}
或者,您可以使用此方法 convert from JSON to a Collection,如果您可以稍微修改一下初始输入:
string json = @"{
'd': [
{
'Name': 'John Smith'
},
{
'Name': 'Mike Smith'
}
]
}";
JObject o = JObject.Parse(json);
JArray a = (JArray)o["d"];
IList<Person> person = a.ToObject<IList<Person>>();
Console.WriteLine(person[0].Name);
// John Smith
Console.WriteLine(person[1].Name);
// Mike Smith
使用新的 DevExpress 框架,它们提供了很棒的功能,例如您可以通过 DataSource 向导 select JSON 对象,因此您无需进行此类编码。
如果您使用旧版本,您可以使用 IEnumerable<T>.Select(x=>x.xyz)
功能迭代 json 的所有值并通过 Lookup.properies.items.add();
放入 lookupEdit
谢谢
我的JSON文件内容是这样的:
{
01: "One",
02: "Two",
03: "Three",
04: "Four",
05: "Five",
06: "Six",
07: "Seven",
08: "Eight",
09: "Nine",
10: "Ten"
}
我正在使用 Newtonsoft.Json
库。我这样试过:
var json = File.ReadAllText(@"numbers.json");
var array = JObject.Parse(json);
lookUpEdit1.Properties.DropDownRows = array.Count > 10 ? 10 : array.Count;
lookUpEdit1.Properties.DisplayMember = "Key";
lookUpEdit1.Properties.ValueMember = "Value";
lookUpEdit1.Properties.DataSource = array.ToList();
lookUpEdit1.Properties.Columns.Add(new LookUpColumnInfo("Key"));
它给出这样的错误:'JObject' does not contain a definition for 'ToList' and no extension method 'ToList' accepting a first argument of type 'JObject' could be found (are you missing a using directive or an assembly reference?)
如何从 JSON 中获取 Devexpress Winforms LookUpEdit 文件?
从 Documentation 开始,您需要数据源是实现 System.Collections.IList
或 System.ComponentModel.IListSource
接口的任何对象。这对您实际希望如何将 JSON 对象转换为列表提出了挑战。例如,您如何称呼您的钥匙(“01”、“02”、...)?你确定 JSON 的格式正确吗(01
而不是 "01"
)?
以下是如何使用 IList 接口将 JSON 对象转换为对象。
using System;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
public class Program
{
public static void Main()
{
string json = @"
{
'01':'One',
'02':'Two',
'03':'Three',
'04':'Four',
'05':'Five',
'06':'Six',
'07':'Seven',
'08':'Eight',
'09':'Nine',
'10':'Ten'
}";
JObject o = JObject.Parse(json);
NumberObject zero = new NumberObject("00", "zero");
List<NumberObject> list = new List<NumberObject>();
foreach (JProperty p in o.Properties())
{
NumberObject num = new NumberObject(p.Name, (string)p.Value);
list.Add(num);
}
// now list can be used as your data source as it is of type List<NumberObject>
}
}
public class NumberObject
{
public string Name {get; set;}
public string Value {get; set;}
public NumberObject(string numName, string numValue)
{
Name = numName;
Value = numValue;
}
}
或者,您可以使用此方法 convert from JSON to a Collection,如果您可以稍微修改一下初始输入:
string json = @"{
'd': [
{
'Name': 'John Smith'
},
{
'Name': 'Mike Smith'
}
]
}";
JObject o = JObject.Parse(json);
JArray a = (JArray)o["d"];
IList<Person> person = a.ToObject<IList<Person>>();
Console.WriteLine(person[0].Name);
// John Smith
Console.WriteLine(person[1].Name);
// Mike Smith
使用新的 DevExpress 框架,它们提供了很棒的功能,例如您可以通过 DataSource 向导 select JSON 对象,因此您无需进行此类编码。
如果您使用旧版本,您可以使用 IEnumerable<T>.Select(x=>x.xyz)
功能迭代 json 的所有值并通过 Lookup.properies.items.add();
谢谢