gpt4 book ai didi

c# - 使用 system.web.script.seriarilization 或使用 json.net 解析 Json

转载 作者:行者123 更新时间:2023-11-30 21:14:53 26 4
gpt4 key购买 nike

json ="{
"data": [
{
"id": "1000",
"from": {
"name": "Anthony Waema",
"category": "message",
"id": "192"
},
"message": "this is the message",
"updated_time": "2001-05-06T19:34:15+0000",
"likes": {
"data": [
{
"id": "100001692250255",
"name": "\u00dcnal Turanl\u0131"
},
{
"id": "100001060078996",
"name": "S\u00e9f\u00e2 K\u00e2ql\u00e4Nn"
}]
},
{
"id": "10150186255753553",
"from": {
"name": "another name",
"category": "message",
"id": "100001"
},
"message": "this is the message",
"updated_time": "2001-04-06T19:34:15+0000",
"likes": {
"data": [
{
"id": "1002345",
"name": "\u00dcnal Turanl\u0131"
},
{
"id": "100234",
"name": "S\u00e9f\u00e2 K\u00e2ql\u00e4Nn"
}]
}
}
]
}";

public class Allstatus
{
public List<sdata> data { get; set; }
public scpaging paging { get; set; }
}

public class sdata
{

public string id { get; set; }
public sfrom from { get; set; }
public string message { get; set; }
public string updated_time {get; set;}
public List<likesdata> likes { get; set; }
}
public class likesdata
{
public string id{ get; set; }
public string name{ get; set; }
}
public class sfrom
{
public string name {get; set;}
public string category {get; set;}
public string id {get; set;}
}

JavaScriptSerializer ser = new JavaScriptSerializer();
page = ser.Deserialize<allstatus>(json);
foreach (sdata cd in page.data)
{
foreach(likesdata ld in cd.likes.data)
{
Console.WriteLine(ld.id+"\t"+ld.name);
}

}

问题:我需要解析 json 并检索喜欢的数据。我可以访问“来自”数据但不能访问“喜欢”数据。执行此操作时出现空引用错误。这里需要帮助。谢谢。

最佳答案

编辑2:

引用 https://gist.github.com/973510 ,从返回的 json 中可以清楚地看出,如果特定的 facebook 消息没有任何点赞,则返回的 json 不包含名为 likes 的属性。 .因此 likes sdata object的属性(property)一片空白。这就是服务器返回数据的方式。

有两种方法可以解决这个问题。手动检查是否 likes一片空白。或者在 sdata 构造函数中初始化 likes 属性。并在 likesdatacollection 构造函数中初始化 likesdata 列表。

代码:

public class sdata
{
// other properties

public likedatacollection likes { get; set; }

public sdata()
{
likes = new likedatacollection();
}
}

public class likedatacollection
{
public List<likesdata> data { get; set; }

public likedatacollection()
{
data = new List<likesdata>();
}
}

这样,即使 fb 不返回任何点赞,构造函数也会初始化属性,因此它们不会为 null。然后您可以检查是否 likes.data.Count > 0 .如果是,则fb返回赞,否则fb不返回赞。

编辑1:

根据 OP 的评论,很明显 json 格式正确。意思是,json 是从某些服务器 api 检索到的。因此它是 sdata类是罪魁祸首。请看this gist完整的解决方案。

简短版本。对于最简单的情况,您的 c# 类需要遵循与 json 完全相同的结构。根据 json,data有一个名为 likes 的属性. likes对象有一个名为 data 的属性这是一个具有属性 id 和 name 的对象数组。

所以你的c#类sdata应该有一个名为 likes 的属性类型 likesdatacollection .这个类应该有一个属性 data类型 List<likesdata> ...

题外话,人们通常似乎更喜欢 Json.Net ... 所以您可能想使用它。我使用它的原因是因为我需要它在 .Net 2.0 代码库中工作......

关于c# - 使用 system.web.script.seriarilization 或使用 json.net 解析 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6009603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com