我有一个这种格式的json文件
{
"myserver": {
"readonly": false,
"slaveonly": false
},
"dateChanged": true,
"pid": "3875",
"data-mode": {
"version": 461329,
"mode": "delta",
"Jobs" : {
"job-mode": "full",
"1" : { id : 100, description : "descritpion 1" },
"2" : { id : 200, description : "descritpion 1" },
"3" : { id : 300, description : "descritpion 1" }
}
}
}
我有一个名为Job
的类public class Job
{
public string Id {get;set;}
public string Desc {get;set;}
}
我需要将所有工作列表作为IList 来自json字符串。
我需要读取Jobs标签(1,2,3)中的所有值。我在这里做了一些工作。
using (StreamReader r = new StreamReader(@"10022017.json"))
{
string json = r.ReadToEnd();
dynamic obj = JsonConvert.DeserializeObject(json);
//obj.
// var xx = ((Newtonsoft.Json.Linq.JArray)((Newtonsoft.Json.Linq.JProperty)(new System.Collections.Generic.Mscorlib_CollectionDebugView<Newtonsoft.Json.Linq.JToken>(((Newtonsoft.Json.Linq.JObject)((Newtonsoft.Json.Linq.JProperty)(new System.Collections.Generic.Mscorlib_CollectionDebugView<Newtonsoft.Json.Linq.JToken>(((Newtonsoft.Json.Linq.JObject)obj).ChildrenTokens).Items[14])).Value).ChildrenTokens).Items[6])).Value).ChildrenTokens;
var jObj = JObject.Parse(json);
var data = jObj.Descendants()
.OfType<JProperty>()
.Where(p => p.Name == "jobs");
foreach (var item in data.Descendants())
{
}
}
不知道如何为每一行获取价值并转换为某些类。
帮助将不胜感激。
感谢
答案 0 :(得分:2)
是的,你的错误是“工作”| “作业” ..
你可以使用作为替代品。
var jObj = JObject.Parse(jsonText); ;
var jobs = jObj["data-mode"]["Jobs"];
var result = jobs.OfType<JProperty>().Where((a,b)=>{
int key = 0;
return int.TryParse(a.Name,out key);
}).Select<JProperty,Job>((jp,i) => {
return new Job
{
Id = jp.Value["id"].ToObject<string>(),
Desc = jp.Value["description"].ToObject<string>()
};
}).ToArray();