使用Newtonsoft Json.Net反序列化数组对象

5

我有以下JSON字符串

[
    {
        "itemtype": "note",
        "body": "some text"
    },
    {
        "itemtype": "list",
        "items": [
            {
                "item": "some text"
            },
            {
                "item": "some text"
            }
        ]
    },
    {
        "itemtype": "link",
        "url": "some link"
    }
]

我需要在C#中解析这个字符串。我的字符串可能会返回像这样的错误代码(或任何其他未知的错误代码)

{"Error":"You need to login before accessing data"}

或者它可能只是一个空数组(没有数据)

[]

这是我的代码。
public void ParseData(string inStr) {
    if (inStr.Trim() != "") {
        dynamic result = JsonConvert.DeserializeObject(inStr);
        if (result is Array) {
            foreach (JObject obj in result.objectList) {
                switch (obj.Property("itemtype").ToString()) {
                    case "list": // do something
                        break;
                    case "note": // do something
                        break;
                    case "link": // do something
                        break;
                }
            }
        } else {
            // ... read error messages
        }
    }
}

问题

在上面的代码中,result 永远不是 Array 类型。实际上,我无法检查它的类型(我尝试了 typeof)。

问题

如何检查字符串中是否有数组,并如何检查其中是否有对象(请注意,这不是一个类型化数组)?


2
尝试检查 JArray ... - petelids
将帖子作为答案并投票支持,谢谢。 - AaA
1个回答

11

JsonConvert.DeserializeObject将把您的Json转换为JArray而不是Array - 请更新您的检查:

if (result is JArray)

1
我已经挠头大约3个小时了,却没看到我漏掉了J。我猜现在已经超过我的睡觉时间了。再次感谢。 - AaA
哈哈,别担心@BobSort,我们都经历过那个阶段 :) - petelids

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