如何访问 JSON 个对象的列表
How to Access list of JSON objects
我正在尝试从外部加载的 JSON 文件中获取 "name" 和 "value" 属性。
我尝试访问列表 Valuestore,但返回时出现错误。
"""无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[ExternalJSON.Form1+Valuestore]',因为该类型需要 JSON 数组 """"
如何访问列表值存储并在列表视图中打印名称和值。
我的代码
public class Value
{
public string value { get; set; }
}
public class Valuestore
{
public string name { get; set; }
public string type { get; set; }
public Value value { get; set; }
}
public class RootObject
{
public string version { get; set; }
public List<Valuestore> Valuestore { get; set; }
}
private void button1_Click(object sender, EventArgs e)
{
var json = File.ReadAllText(".....\static_settings");
var settingsNamelst1 = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(json);
var settingsNamelst2 = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Valuestore>>(json);
foreach (var lst in settingsNamelst2)
{
listView1.Items.Add(lst.name);
}
}
我的 JSON 文件是
{
"version": "2",
"valuestore": [
{
"name": "abcd1",
"type": "string",
"value": {
"value": "0002"
}
},
{
"name": "abcd2",
"type": "string",
"value": {
"value": "001"
}
}
]
}
您的 settingsNamelst1
属性 已经反序列化并包含 Valuestore
,无需再次反序列化:
var settingsNamelst1 = JsonConvert.DeserializeObject<RootObject>(json);
foreach (var item in settingsNamelst1.Valuestore)
{
listView1.Items.Add(item.name);
}
您看到异常的原因是您的 JSON 架构与 List<Valuestore>
不匹配,它与您的 RootObject
.
匹配
您可以做的最简单的事情是动态反序列化,并通过动态属性访问对象。
var json = @"{
""version"": ""2"",
""valuestore"": [
{
""name"": ""abcd1"",
""type"": ""string"",
""value"": {
""value"": ""0002""
}
},
{
""name"": ""abcd2"",
""type"": ""string"",
""value"": {
""value"": ""001""
}
}
]
}";
dynamic jsonTemp = JsonConvert.DeserializeObject(json);
foreach (var i in jsonTemp.valuestore)
{
Console.WriteLine("name: {0}, value: {1} \n", i.name, i.value.value);
}
我正在尝试从外部加载的 JSON 文件中获取 "name" 和 "value" 属性。
我尝试访问列表 Valuestore,但返回时出现错误。
"""无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[ExternalJSON.Form1+Valuestore]',因为该类型需要 JSON 数组 """"
如何访问列表值存储并在列表视图中打印名称和值。
我的代码
public class Value
{
public string value { get; set; }
}
public class Valuestore
{
public string name { get; set; }
public string type { get; set; }
public Value value { get; set; }
}
public class RootObject
{
public string version { get; set; }
public List<Valuestore> Valuestore { get; set; }
}
private void button1_Click(object sender, EventArgs e)
{
var json = File.ReadAllText(".....\static_settings");
var settingsNamelst1 = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(json);
var settingsNamelst2 = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Valuestore>>(json);
foreach (var lst in settingsNamelst2)
{
listView1.Items.Add(lst.name);
}
}
我的 JSON 文件是
{
"version": "2",
"valuestore": [
{
"name": "abcd1",
"type": "string",
"value": {
"value": "0002"
}
},
{
"name": "abcd2",
"type": "string",
"value": {
"value": "001"
}
}
]
}
您的 settingsNamelst1
属性 已经反序列化并包含 Valuestore
,无需再次反序列化:
var settingsNamelst1 = JsonConvert.DeserializeObject<RootObject>(json);
foreach (var item in settingsNamelst1.Valuestore)
{
listView1.Items.Add(item.name);
}
您看到异常的原因是您的 JSON 架构与 List<Valuestore>
不匹配,它与您的 RootObject
.
您可以做的最简单的事情是动态反序列化,并通过动态属性访问对象。
var json = @"{
""version"": ""2"",
""valuestore"": [
{
""name"": ""abcd1"",
""type"": ""string"",
""value"": {
""value"": ""0002""
}
},
{
""name"": ""abcd2"",
""type"": ""string"",
""value"": {
""value"": ""001""
}
}
]
}";
dynamic jsonTemp = JsonConvert.DeserializeObject(json);
foreach (var i in jsonTemp.valuestore)
{
Console.WriteLine("name: {0}, value: {1} \n", i.name, i.value.value);
}