【问题标题】:Deserialize JSON Data into a List in C#在 C# 中将 JSON 数据反序列化为列表
【发布时间】:2019-05-03 14:14:24
【问题描述】:

经过几个小时的搜索和尝试,有人可以帮我解决这个简单的问题吗:

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

每一个答案都会很高兴。

最好的问候

【问题讨论】:

标签: c# json list serialization


【解决方案1】:

使用Newtonsoft.Json

可以通过以下方式完成:

    List<string> yourList = JsonConvert.DeserializeObject(YourJson).ToList();

注意:它只能保存为字符串列表,但可以调用:yourList.YourKeyName

【讨论】:

  • 我添加了以下内容:return JsonConvert.DeserializeObject(json).ToList();不幸的是,他说:“对象”不包含“ToList”的定义(可能缺少使用指令)”
  • 确保你的函数也是List&lt;string&gt;
  • 我又重新检查了一遍。是的,我的函数也是 List: private List getKey(string ip){List content = new List();var request = HttpWebRequest.Create(string.Format(ip,小路));使用 (HttpWebResponse response = request.GetResponse() as HttpWebResponse){使用 StreamReader reader = new StreamReader(response.GetResponseStream())){var json = reader.ReadToEnd();content = JsonConvert.DeserializeObject(json).ToList() ;}}返回内容;}
【解决方案2】:

取决于你想要什么,但你也可以为你的 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);
}

【讨论】:

    【解决方案3】:

    按照@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);
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多