将 json 转换为 C# 对象时,内部类为 null
本文关键字:内部类 null json 转换 对象 | 更新日期: 2023-09-27 18:33:52
我正在尝试将包含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; }