将 json 转换为 C# 对象时,内部类为 null



我正在尝试将包含Json(pinterest)的字符串转换为c#对象。 我正在使用Json .NET,无论我尝试什么,data.pins.images内部文本总是转换为null。 它显然不是空的。

c# 类是由联机转换器创建的。 实际的 Json 的"引脚"数组包含 50 个元素。 为了简化问题,我删除了除其中一个之外的所有内容。

下面列出了 Json 文本和测试程序。 请帮忙。

using System.IO;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
//using System.Runtime.Serialization.Json;
namespace PinterestConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string jsonString = 
            "{"+
                ""status": "success","+
                ""code": 0,"+
                ""host": "ngapi2-67c11435","+
                ""generated_at": "Sun, 07 Dec 2014 12:15:10 +0000","+
                ""message": "ok","+
                ""data": "+
                "{"+
                    ""pins": "+
                    "["+
                        "{"+
                            ""attribution": null,"+
                            ""description": "Roasted Potato Salad with Pancetta, Sun-Dried Tomatoes and Arugula","+
                            ""pinner": "+
                            "{"+
                                ""about": "","+
                                ""location": "","+
                                ""full_name": "Anselma Berumen","+
                                ""follower_count": 15,"+
                                ""image_small_url": "http://passets-ak.pinterest.com/images/user/default_30.png","+
                                ""pin_count": 1683,"+
                                ""id": "460422899312895060","+
                                ""profile_url": "http://www.pinterest.com/chemita1331/""+
                            "},"+
                            ""repin_count": 0,"+
                            ""dominant_color": "#b7947a","+
                            ""like_count": 0,"+
                            ""link": "http://www.domesticate-me.com/roasted-potato-salad-with-pancetta-sun-dried-tomatoes-and-arugula/","+
                            ""images": "+
                            "{"+
                                ""image": "+
                                "{"+
                                    ""url": "http://media-cache-ec0.pinimg.com/237x/a0/97/9e/a0979eb898eee640eb980181035e75bc.jpg","+
                                    ""width": 237,"+
                                    ""height": 334"+
                                "}" +
                            "},"+
                            ""embed": null,"+
                            ""is_video": false,"+
                            ""id": "460422761878479851""+
                        "}"+
                    "],"+
                    ""user": "+
                    "{"+
                        ""about": "","+
                        ""location": "","+
                        ""full_name": "Anselma Berumen","+
                        ""follower_count": 15,"+
                        ""image_small_url": "http://passets-ak.pinterest.com/images/user/default_30.png","+
                        ""pin_count": 1683,"+
                        ""id": "460422899312895060","+
                        ""profile_url": "http://www.pinterest.com/chemita1331/""+
                    "},"+
                    ""board": "+
                    "{"+
                        ""description": "","+
                        ""url": "/chemita1331/salads/","+
                        ""follower_count": 4,"+
                        ""image_thumbnail_url": "http://media-cache-ak0.pinimg.com/upload/460422830593447062_board_thumbnail_2014-09-18-00-49-37_15359_60.jpg","+
                        ""pin_count": 237,"+
                        ""id": "460422830593447062","+
                        ""name": "Salads""+
                    "}"+
                "}"+
            "}";
            JsonPinterestTester jsonPinterestTester = new JsonPinterestTester();
            PinsOfBoardRequest pinsOfBoardRequest = jsonPinterestTester.Parse(jsonString);
            PinsOfBoardRequestImages images =   pinsOfBoardRequest.data.pins[0].images;
            Image237x image = pinsOfBoardRequest.data.pins[0].images.image237x;
            Console.ReadKey();
        }
    }
    class JsonPinterestTester
    {
        public PinsOfBoardRequest Parse(string jsonSource)
        {
            PinsOfBoardRequest request = 
                Newtonsoft.Json.JsonConvert.DeserializeObject<PinsOfBoardRequest>(jsonSource);
            return request;
        }
    }
    public class Image237x
    {
        public string url { get; set; }
        public int width { get; set; }
        public int height { get; set; }
    }
    public class PinsOfBoardRequestImages
    {
        public Image237x image237x { get; set; }
    }
    public class PinsOfBoardRequestPinner
    {
        public string about { get; set; }
        public string location { get; set; }
        public string full_name { get; set; }
        public int follower_count { get; set; }
        public string image_small_url { get; set; }
        public int pin_count { get; set; }
        public string id { get; set; }
        public string profile_url { get; set; }
    }
    public class PinsOfBoardRequestUser
    {
        public string about { get; set; }
        public string location { get; set; }
        public string full_name { get; set; }
        public int follower_count { get; set; }
        public string image_small_url { get; set; }
        public int pin_count { get; set; }
        public string id { get; set; }
        public string profile_url { get; set; }
    }
    public class PinsOfBoardRequestBoard
    {
        public string description { get; set; }
        public string url { get; set; }
        public int follower_count { get; set; }
        public string image_thumbnail_url { get; set; }
        public int pin_count { get; set; }
        public string id { get; set; }
        public string name { get; set; }
    }
    public class PinsOfBoardRequestPin
    {
        public object attribution { get; set; }
        public string description { get; set; }
        public PinsOfBoardRequestPinner pinner { get; set; }
        public int repin_count { get; set; }
        public string dominant_color { get; set; }
        public int like_count { get; set; }
        public string link { get; set; }
        public PinsOfBoardRequestImages images { get; set; }
        public object embed { get; set; }
        public bool is_video { get; set; }
        public string id { get; set; }
    }
    public class PinsOfBoardRequestData
    {
        //public IList<PinsOfBoardRequestPin> pins { get; set; }
        public PinsOfBoardRequestPin[] pins { get; set; }
        public PinsOfBoardRequestUser user { get; set; }
        public PinsOfBoardRequestBoard board { get; set; }
    }
    public class PinsOfBoardRequest
    {
        public string status { get; set; }
        public int code { get; set; }
        public string host { get; set; }
        public string generated_at { get; set; }
        public string message { get; set; }
        public PinsOfBoardRequestData data { get; set; }
    }
}

当然,PinsOfBoardRequestImages类的Image237x属性应该命名为image

public class PinsOfBoardRequestImages
{
    public Image237x image { get; set; }
}

此外,给定可能推断数组的名称images,请仔细检查样本是否与实际输入匹配

真的是:

images: { image: { ..

还是:

images:  [{ image: {.. , image { ...] ?

在这种情况下,DTO 将是一个数组:

    public Image237x[] image { get; set; }

最新更新