将JSON数据反序列化为C#

时间:2019-05-03 14:14:24

标签: c# json list serialization

经过数小时的搜索和尝试,请有人能这么友好并帮助我解决以下简单问题:

我有以下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}]

每个答案都会很高兴。

最诚挚的问候

3 个答案:

答案 0 :(得分:1)

使用Newtonsoft.Json

可以通过以下方式完成:

    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);
        }