【问题标题】:Newtonsoft json and graph apiNewtonsoft json 和图形 api
【发布时间】:2018-04-01 13:46:06
【问题描述】:

我使用 Newtonsoft json 反序列化 facebook graph api 响应。

例如,当我解析用户帖子时,响应如下:

data": [
    {
      "story": "",
      "created_time": "",
      "id": ""
    }]

我创建了一个类似的类:

 public class FacebookPost
    {
        public string created_time { get; set; }
        public string id { get; set; }
        public string story { get; set; }
    }

Newtonsoft 将值直接附加到类中,我可以使用它们。

我的问题是当我尝试解析 cmets 时,api 响应如下:

"data": [
    {
      "created_time": "",
      "from": {
        "name": "",
        "id": ""
      },
      "message": "",
      "id": ""
    }]

例如,名称和 ID 在 from 部分内, 我必须如何构造类才能获取from.namefrom.id 的值?

非常感谢 ---------------------------- 新添加 ------ 我使用以下类:

 public class FacebookCommentsResults
    {
        public PostComments[] data { get; set; }        
        public FacebookPagingInfo Paging { get; set; }
    }


public class PostComments
    {
        public string created_time { get; set; }
        public From from { get; set; }
    }

public class From
{
    public string name { get; set; }
    public string id { get; set; }
}

行 var created_time = comment.created_time;工作正常! 下一行 var name = comment.name; GIVES ERROR --> Reactions.PostComments'不包含'name'的定义,并且找不到接受'Reactions.PostComments'类型的第一个参数的扩展方法'name'(您是否缺少 using 指令或程序集引用?)

【问题讨论】:

    标签: json facebook api graph json.net


    【解决方案1】:

    当响应是

    "data": [
        {
          "created_time": "",
          "from": {
            "name": "",
            "id": ""
          },
          "message": "",
          "id": ""
        }]
    

    现在 json 架构已更改,因此我们必须更改我们的类。原因是from是我们主json中的另一个对象,所以我们需要下面的类来访问from.idfrom.name

    public class From
    {
        public string name { get; set; }
        public string id { get; set; }
    }
    
    public class FacebookPost
    {
        public string created_time { get; set; }
        public From from { get; set; }
        public string message { get; set; }
        public string id { get; set; }
    }
    

    编辑

    行 var created_time = comment.created_time;工作正常!下一个 行 var name = comment.name; GIVES ERROR --> Reactions.PostComments' 不包含“名称”的定义,也没有扩展方法 'name' 接受'Reactions.PostComments' 类型的第一个参数 可以找到(您是否缺少 using 指令或程序集 参考?)

    from 是一个对象,而在该对象中name 是一个属性,因此您无法通过提供comment.name 来访问它。首先您需要从comment 中获取from 对象,然后您可以检索名称属性。

    【讨论】:

    • 非常感谢您的回复,我会添加所有代码看看它返回什么
    • 我在帖子底部添加了新代码,其中包含我使用的确切类和我得到的错误,如果您有任何想法请帮忙,谢谢!!!
    • @TeO - fromcomment 中的一个对象,namefrom 对象中的一个属性。先检索from对象,再检索name属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    相关资源
    最近更新 更多