C#中的Foreach Json对象

时间:2016-10-27 14:24:24

标签: c# arrays json object

我正在使用Daniel Crenna创建的Json库。

我有一个字符串json文档:

{
    "id": "00132",
    "items":[
        {
           "name":"papers"
        },
        {
           "name":"glasses"
        }
    ]
}

我反序列化它,如果我想访问“id”,我可以这样做:

Console.WriteLine(myjsonvar.id);

但如果我试图预测“物品”财产:

foreach(var item in myjsonvar.items){
    Console.WriteLine(item.ToString());
} 

显示:“System.Collections.Generic.Dictionary'2 [System.String,System.Object]”

如果我在这个内部做另一个foreach:

 foreach(var item in myjsonvar.items){
        foreach(var properties in item){
            Console.WriteLine(properties);
        }
  }

我正在“ [姓名,论文]

如何访问以下属性:

 foreach(var item in myjsonvar.items){
        var itemName = item.name;
  }

感谢您的回复。

3 个答案:

答案 0 :(得分:2)

由于items是一个字典数组,因此您的item变量是一个字典,您可以尝试使用索引器[]访问其中的对象:

var itemName = item["name"];  // returns "papers", "glasses", etc.

传入索引器的是键(属性名称),返回的是值。

请注意,JSON对象中的属性可以是字符串,整数,布尔值,另一个对象或数组,这就是字典值为System.Object的原因。您可以将其强制转换为基础类型。在这种情况下,item["name"].ToString()应该有效。

在此处阅读更多内容:Dictionary Class

答案 1 :(得分:0)

您尝试做的是反序列化您的json字符串。在C#中,任何对象都有ToString()方法,它基本上将对象的类型作为字符串返回。这意味着您看到的内容:System.Collections.Generic.Dictionary'2[System.String, System.Object],是Dictionary<string, object>类型的对象执行其ToString()方法的结果。

该库将json字符串的那一部分转换为字典的原因是因为你没有为它提供它应该转换为的类型(或者它可能将任何对象转换为字典,我不会这样做。知道你正在使用哪个库。

如果您可以指定库应将json转换为的类型,则应创建一个类:

public class DeserializedResult {
    public int Id { get; set; }
    public List<string> Items { get; set; }
    //you can also choose to use a dictionary if you want to keep the key "names"
    //public List<Dictionary<string, string>> Items { get; set; }
}

库可能会将属性名称与json字符串的键进行比较,并相应地反序列化数据。

如果您的json字符串在名称旁边有另一个键,让我们说“年龄”,那么您应该创建一个表示项目内数据的类:

public class Person {
    public string Name { get; set; }
    public int Age { get; set; }
}

然后在DeserializedResult中,Items将是:

public List<Person> Items { get; set;}

答案 2 :(得分:0)

请申请我的解决方案。

为你创建类json。

public class JsonCLass
{
    public string id { get; set; }
    public Item[] items { get; set; }
}

public class Item
{
    public string name { get; set; }
}

然后使用以下代码来渴望json字符串。

string strXmlData = File.ReadAllText("file.txt");//json string

            JavaScriptSerializer serializer = new JavaScriptSerializer();
            JsonCLass Data = serializer.Deserialize<JsonCLass>(strXmlData);

            string Id = Data.id;//Id field

            foreach (Item objitem in Data.items)
            {
                string ab = objitem.name;//Get all item of jsonID .
            }

谢谢。