在C#中循环遍历JSON数组

27

我有一个类似于json格式的字符串,如下所示:

{"objectType" : "Subscriber", "objectList":[{"firstName":"name1","email":"email@example.com","address":"exampleAddress"},{"firstName":"name2","email":"email2@example.com","address":"exampleAddress2"}]}

我需要在我的C#代码中解析它。我已经尝试过,

JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject(myjson here);

但我无法循环遍历“objectList”数组。如何做到?


2
可能是 https://dev59.com/cmgu5IYBdhLWcg3wt5Lt 的重复问题。 - Robert
你能展示一下你的“TargetType”吗? - yogi
3个回答

42
var jsonObj = new JavaScriptSerializer().Deserialize<RootObj>(json);
foreach (var obj in jsonObj.objectList)
{
    Console.WriteLine(obj.address);
}


public class ObjectList
{
    public string firstName { get; set; }
    public string email { get; set; }
    public string address { get; set; }
}

public class RootObj
{
    public string objectType { get; set; }
    public List<ObjectList> objectList { get; set; }
}

提示:您可以使用此网站将您的JSON字符串转换为C#类。

编辑

使用Json.Net

dynamic jsonObj = JsonConvert.DeserializeObject(json);

foreach (var obj in jsonObj.objectList)
{
    Console.WriteLine(obj.address);
}

谢谢您的快速回复。它正常工作。是否可能在没有类ObjectList和RootObj的情况下工作? - Anoop Joshi P
我需要添加任何dll吗? - Anoop Joshi P
@WingsOfFire 是的,链接在答案中。我最喜欢的 JSON 解析器。 - I4V
Newtonsoft.Json怎么样? - QMaster

4
var routes_list = (Dictionary<string, object>)json_serializer.DeserializeObject(myjson);

foreach (var record in routes_list)
{
    Console.WriteLine(record);
}

1
这对我很有帮助,基本上是将JSON转换为YAML。
    string JSONDeserialized {get; set;}
    public int indentLevel;

    private bool JSONDictionarytoYAML(Dictionary<string, object> dict)
    {
        bool bSuccess = false;
        indentLevel++;

        foreach (string strKey in dict.Keys)
        {
            string strOutput = "".PadLeft(indentLevel * 3) + strKey + ":";
            JSONDeserialized+="\r\n" + strOutput;

            object o = dict[strKey];
            if (o is Dictionary<string, object>)
            {
                JSONDictionarytoYAML((Dictionary<string, object>)o);
            }
            else if (o is ArrayList)
            {
                foreach (object oChild in ((ArrayList)o))
                {
                    if (oChild is string)
                    {
                        strOutput = ((string)oChild);
                        JSONDeserialized += strOutput + ",";
                    }
                    else if (oChild is Dictionary<string, object>)
                    {
                        JSONDictionarytoYAML((Dictionary<string, object>)oChild);
                        JSONDeserialized += "\r\n";  
                    }
                }
            }
            else
            {
                strOutput = o.ToString();
                JSONDeserialized += strOutput;
            }
        }

        indentLevel--;

        return bSuccess;

    }

使用方法
        Dictionary<string, object> JSONDic = new Dictionary<string, object>();
        JavaScriptSerializer js = new JavaScriptSerializer();

          try {

            JSONDic = js.Deserialize<Dictionary<string, object>>(inString);
            JSONDeserialized = "";

            indentLevel = 0;
            DisplayDictionary(JSONDic); 

            return JSONDeserialized;

        }
        catch (Exception)
        {
            return "Could not parse input JSON string";
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接