Json newtonsoft:从对象反序列化字符串数组

时间:2018-06-22 06:09:29

标签: c# json json.net

我的JSON很长,我从长JSON中仅提取了一个部分“ parent_crumbs”

 ...................,
 "parent_crumbs":["Platforms","New platform"],
 "promise_by":"2016-08-01",
  ....

我用来获取“ parent_crumbs”值的代码是

  JObject lp_p = JObject.Parse(response_json);
  string val= lp_p["parent_crumbs"].ToString();

这将返回以下值

 "[\r\n  \"Platforms\",\"New platform\"\r\n]"

现在我必须与数组中的第一个值进行比较,因为字符串在字典中可以用作键值,并且如果可用,则返回ID

        Packages = new Dictionary<string, int>();
        Packages.Add("Platforms", 10212);
        Packages.Add("New platform", 10202);
        Packages.Add("Unknown platform", 10203);
        int category=

        if(Packages.ContainsKey(val))
        {
                Packages.TryGetValue(val, out category);
        }

因此,在当前代码下,由于存在[\ r \ n等内容,所以我无法立即进行比较。

如何在不使用[\ r \ n等特殊字符的情况下,将其作为字符串数组获取值。

为我创建JSON的模型类以进行反序列化不是首选方法。由于创建类对我来说是一项艰巨的任务,因为JSON中包含许多属性,并且具有自然动态性

3 个答案:

答案 0 :(得分:2)

我们可以使用以下代码

var input = "[\r\n  \"Platforms\",\"New platform\"\r\n]";
            var array =(JArray) JsonConvert.DeserializeObject(input);
            bool isEqual = array[0].Value<string>() == "Platforms";

答案 1 :(得分:2)

您还可以使用Linq

将其转换为数组
using System.Linq;

var tmp = lp_p["parent_crumbs"].Select(x => x.ToString());
foreach (var x in tmp)
{
    Console.WriteLine(x.ToString());
}

通过使用Select,它将帮助您将其转换为数组而不是字符串

答案 2 :(得分:0)

您可以使用DeserializeAnonymousType方法:

var myType = new 
{ 
    parent_crumbs = new []{ "" }, 
    promise_by = default(DateTime) 
};

var result = JsonConvert.DeserializeAnonymousType(json, myType);

int category = 0;
string key = result.parent_crumbs[0];
if(Packages.ContainsKey(key))
{
    Packages.TryGetValue(key, out category);
}

参考文献: DotNetFiddle Example DeserializeAnonymousType