我的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中包含许多属性,并且具有自然动态性
答案 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);
}