Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c语言中的复杂json解析#_C#_Json_Parsing_C# 4.0_Gridview - Fatal编程技术网

C# c语言中的复杂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":"

我正在用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":"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吗?在测试它之前,我从未发布过代码。