经过数小时的搜索和尝试,请有人能这么友好并帮助我解决以下简单问题:
我有以下JSON字符串:
[
{
"key": 1234,
},
{
"key": 9876,
}
]
如何读取此JSON并将所有值写入列表?
到目前为止已经进行了很多尝试,但是请参见以下代码:
List<int> content = new List<int>;
var json = reader.ReadToEnd();
var obj = JObject.Parse(json);
第一次尝试:
foreach(var key in obj)
{
content.Add((int)obj["key"]);
}
其他尝试:
var token = obj.SelectToken("key");
foreach(var item in token)
{
content.Add(JsonConvert.DeserializeObject<int>(item.value));
}
还是这种方式?
foreach(var key in obj)
{
content.Add(Int32.Parse(obj.GetValue("key").ToString()));
}
尝试运行最后一次尝试,出现以下错误消息:
Error reading JObject from JsonReader. Current JsonReader item is not an object: StartArray.
即使JSON如下所示:
[{\"key\":9999},{\"key\":9876}]
每个答案都会很高兴。
最诚挚的问候
答案 0 :(得分:1)
可以通过以下方式完成:
List<string> yourList = JsonConvert.DeserializeObject(YourJson).ToList();
注意:它只能保存为字符串列表,但可以使用yourList.YourKeyName
来调用。
答案 1 :(得分:0)
取决于您想要的内容,但是您也可以为json创建一个指定的类。 以下类表示您的json字符串。
public class RootObject
{
public int key { get; set; }
}
然后您可以按如下所示反序列化json字符串:
string json=reader.ReadToEnd();
List<RootObject> myobs=JsonConvert.DeserialiseObject<List<RootObject>>(json);
然后您可以使用列表进行填充。
foreach(var ob in myobs){
Console.WriteLine(ob.key);
}
答案 2 :(得分:0)
按照@bolkay所说的,您需要定义对象:
public class KeyClass
{
public int Key { get; set; }
}
,然后如果您的JSON例如在名为jsString的变量中
List<int> content = new List<int>();
var keys = JsonConvert.DeserializeObject<List<KeyClass>>(jsString);
foreach (var item in keys)
{
content.Add(item.Key);
}