C# c语言中的复杂json解析#
我正在用C#(ASP)进行jSon解析。问题是,当来自klout的jSon非常复杂时,这就是响应C# c语言中的复杂json解析#,c#,json,parsing,c#-4.0,gridview,C#,Json,Parsing,C# 4.0,Gridview,我正在用C#(ASP)进行jSon解析。问题是,当来自klout的jSon非常复杂时,这就是响应 {"myInfluencers":[{"entity":{"id":"851563","payload":{"kloutId":"851563","nick":"YouTube","score":{"score":100.0},"scoreDeltas":{"dayChange":0.0,"weekChange":0.0,"monthChange":0.0}}}},{"entity":{"id":"
{"myInfluencers":[{"entity":{"id":"851563","payload":{"kloutId":"851563","nick":"YouTube","score":{"score":100.0},"scoreDeltas":{"dayChange":0.0,"weekChange":0.0,"monthChange":0.0}}}},{"entity":{"id":"100768049884337217","payload":{"kloutId":"100768049884337217","nick":"JessicaBiel","score":{"score":65.81697082519531}}}},{"entity":{"id":"879345","payload":{"kloutId":"879345","nick":"brokemogul","score":{"score":65.55970764160156},"scoreDeltas":{"dayChange":-0.2452850341796875,"weekChange":-0.6857528686523438,"monthChange":-2.5359420776367188}}}},{"entity":{"id":"25332752669424610","payload":{"kloutId":"25332752669424610","nick":"EsteeStanley","score":{"score":64.1717529296875}}}},{"entity":{"id":"28710452389286536","payload":{"kloutId":"28710452389286536","nick":"robknox_ys","score":{"score":60.353816986083984}}}}],"myInfluencees":[{"entity":{"id":"98516250154496343","payload":{"kloutId":"98516250154496343","nick":"LYNASXD","score":{"score":14.632675170898438}}}},{"entity":{"id":"42784201225370648","payload":{"kloutId":"42784201225370648","nick":"JenThackray","score":{"score":14.392120361328125}}}},{"entity":{"id":"52635827290381715","payload":{"kloutId":"52635827290381715","nick":"JTChile","score":{"score":13.279963493347168}}}},{"entity":{"id":"60235650788244656","payload":{"kloutId":"60235650788244656","nick":"upallnight356","score":{"score":11.61323070526123}}}},{"entity":{"id":"97108875505882083","payload":{"kloutId":"97108875505882083","nick":"anisahmutiahna","score":{"score":10.5490140914917}}}}],"myInfluencersCount":14,"myInfluenceesCount":25}
生成的类如下所示
public class Score
{
public double score { get; set; }
}
public class ScoreDeltas
{
public double dayChange { get; set; }
public double weekChange { get; set; }
public double monthChange { get; set; }
}
public class Payload
{
public string kloutId { get; set; }
public string nick { get; set; }
public Score score { get; set; }
public ScoreDeltas scoreDeltas { get; set; }
}
public class Entity
{
public string id { get; set; }
public Payload payload { get; set; }
}
public class MyInfluencer
{
public Entity entity { get; set; }
}
public class Score2
{
public double score { get; set; }
}
public class Payload2
{
public string kloutId { get; set; }
public string nick { get; set; }
public Score2 score { get; set; }
}
public class Entity2
{
public string id { get; set; }
public Payload2 payload { get; set; }
}
public class MyInfluencee
{
public Entity2 entity { get; set; }
}
public class RootObject
{
public List<MyInfluencer> myInfluencers { get; set; }
public List<MyInfluencee> myInfluencees { get; set; }
public int myInfluencersCount { get; set; }
public int myInfluenceesCount { get; set; }
}
公开课分数
{
公共双倍分数{get;set;}
}
公共类得分三角洲
{
公共双日变化{get;set;}
公共双周更改{get;set;}
公共双月更改{get;set;}
}
公共类有效载荷
{
公共字符串kloutId{get;set;}
公共字符串nick{get;set;}
公共分数{get;set;}
公共分数增量分数增量{get;set;}
}
公共类实体
{
公共字符串id{get;set;}
公共有效负载{get;set;}
}
公共类影响者
{
公共实体{get;set;}
}
公开课成绩2
{
公共双倍分数{get;set;}
}
公共类有效载荷2
{
公共字符串kloutId{get;set;}
公共字符串nick{get;set;}
公共分数2得分{get;set;}
}
公共类实体2
{
公共字符串id{get;set;}
公共有效载荷2有效载荷{get;set;}
}
公共课我的影响力
{
公共实体2实体{get;set;}
}
公共类根对象
{
公共列表MyInfluencer{get;set;}
公共列表myInfluencees{get;set;}
public int myInfluencerScont{get;set;}
public int myinfluencecount{get;set;}
}
我想用gridview绑定结果。即使我使用JSON.NET,我们也无法逐个提取内容。我以前使用过反序列化
,但这里的场景太嵌套了。
任何能帮我找到解决这个问题的好方法的人。非常感谢你的温柔你的json确实嵌套得很深。我不会声明很多小类,而是这样做:
var jobj = (JObject)JsonConvert.DeserializeObject(json);
var myInfluencers = jobj["myInfluencers"]
.Children()
.Select(x => (dynamic)x["entity"])
.Select(x => new
{
id = x.id.ToString(),
kloutId = x.payload.kloutId.ToString(),
nick = x.payload.nick.ToString(),
score = x.payload.score.score.ToString(),
})
.ToArray();
myinfluences
的结构与myinfluences
即使您不想使用匿名类,您也不需要比这更多的类
public class DummyClass
{
public string id;
public string kloutId;
public string nick;
public string score;
//a few fields more??
}
我找到的最佳解决方案是创建小型类
- 使用JSON.NET JObject o=JObject.Parse(text_klout); influencee=o.SelectToken(“myInfluencees”).ToString(); 影响者=o.SelectToken(“我的影响者”).ToString(); 把他们分开 然后使用 JavaScriptSerializer_jsserializer=新的JavaScriptSerializer(); 它是有效的
Select(x=>new DummyClass
而不是匿名类。感谢您的回复..我正在检查它并返回给您它不起作用,因为它指出x=>new处的错误..“可能缺少对Microsft.CSharp的引用”,但我已经包含了引用。它说dunamic的值将在运行时解析。您使用的是.net 4.0吗?在测试它之前,我从未发布过代码。