将复杂json对象反序列化为自定义数据模型c#
在C#中将json数据转换为自定义模型时,我被绊倒了。json数据的结构如下所示:将复杂json对象反序列化为自定义数据模型c#,c#,.net,json,json.net,deserialization,C#,.net,Json,Json.net,Deserialization,在C#中将json数据转换为自定义模型时,我被绊倒了。json数据的结构如下所示: { "id": "100002231955291", "albums": { "data": [ { "id": "103570756393989", "name": "xyz", "photos": { "data": [ { "id": "7075639
{
"id": "100002231955291",
"albums": {
"data": [
{
"id": "103570756393989",
"name": "xyz",
"photos": {
"data": [
{
"id": "707563939dsf89",
"picture": "htp:// ssdsome data"
},
{
"id": "7075dfsd6393989",
"picture": "htp:// ssdsome data"
},
............
..................... .. and so on ......
我尝试了反序列化上述json数据的代码:
var parsed = JsonConvert.DeserializeObject<FacebookModel>(data.ToString());
var parsed=JsonConvert.DeserializeObject(data.ToString());
但问题是rootObject还包含一些无法转换(反序列化)的Json数组。我的模型(poco类)是:
公共类FacebookModel
{
公共字符串id{get;set;}
列出相册{get;set;}
}
公共类模型
{
公共字符串id{get;set;}
公共字符串名称{get;set;}
公开列表照片{get;set;}
}
公共类图片模型
{
公共字符串id{get;set;}
公共字符串图片{get;set;}
}
错误:
无法将当前JSON对象(例如{“name”:“value”})反序列化为类型“System.Collections.Generic.List`1[Bricks.Common.CustomModels.PictureModel]”,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。
若要修复此错误,请将JSON更改为JSON数组(例如[1,2,3]),或更改反序列化类型,使其成为可以从JSON对象反序列化的正常.NET类型(例如,不是integer之类的基元类型,也不是数组或列表之类的集合类型)。还可以将JsonObjectAttribute添加到类型中,以强制它从JSON对象反序列化。
任何帮助都将不胜感激。谢谢
相册和照片实际上是对象,而不是数组
比如:
public class FacebookModel
{
public string id { get; set; }
public AlbumModel albums { get; set; }
}
public class AlbumModel
{
public List<AlbumData> data {get;set;}
}
public class AlbumData
{
public string id { get; set; }
public string name { get; set; }
public PictureModel photos { get; set; }
}
public class PictureModel
{
public List<PictureData> data {get;set;}
}
public class PictureData
{
public string id { get; set; }
public string picture { get; set; }
}
公共类FacebookModel
{
公共字符串id{get;set;}
公共相册模型相册{get;set;}
}
公共类模型
{
公共列表数据{get;set;}
}
公共类数据
{
公共字符串id{get;set;}
公共字符串名称{get;set;}
公共图片模型照片{get;set;}
}
公共类图片模型
{
公共列表数据{get;set;}
}
公共类图片数据
{
公共字符串id{get;set;}
公共字符串图片{get;set;}
}
等等。相册和照片实际上是对象,而不是数组
比如:
public class FacebookModel
{
public string id { get; set; }
public AlbumModel albums { get; set; }
}
public class AlbumModel
{
public List<AlbumData> data {get;set;}
}
public class AlbumData
{
public string id { get; set; }
public string name { get; set; }
public PictureModel photos { get; set; }
}
public class PictureModel
{
public List<PictureData> data {get;set;}
}
public class PictureData
{
public string id { get; set; }
public string picture { get; set; }
}
公共类FacebookModel
{
公共字符串id{get;set;}
公共相册模型相册{get;set;}
}
公共类模型
{
公共列表数据{get;set;}
}
公共类数据
{
公共字符串id{get;set;}
公共字符串名称{get;set;}
公共图片模型照片{get;set;}
}
公共类图片模型
{
公共列表数据{get;set;}
}
公共类图片数据
{
公共字符串id{get;set;}
公共字符串图片{get;set;}
}
等等。相册和照片实际上是对象,而不是数组
比如:
public class FacebookModel
{
public string id { get; set; }
public AlbumModel albums { get; set; }
}
public class AlbumModel
{
public List<AlbumData> data {get;set;}
}
public class AlbumData
{
public string id { get; set; }
public string name { get; set; }
public PictureModel photos { get; set; }
}
public class PictureModel
{
public List<PictureData> data {get;set;}
}
public class PictureData
{
public string id { get; set; }
public string picture { get; set; }
}
公共类FacebookModel
{
公共字符串id{get;set;}
公共相册模型相册{get;set;}
}
公共类模型
{
公共列表数据{get;set;}
}
公共类数据
{
公共字符串id{get;set;}
公共字符串名称{get;set;}
公共图片模型照片{get;set;}
}
公共类图片模型
{
公共列表数据{get;set;}
}
公共类图片数据
{
公共字符串id{get;set;}
公共字符串图片{get;set;}
}
等等。相册和照片实际上是对象,而不是数组
比如:
public class FacebookModel
{
public string id { get; set; }
public AlbumModel albums { get; set; }
}
public class AlbumModel
{
public List<AlbumData> data {get;set;}
}
public class AlbumData
{
public string id { get; set; }
public string name { get; set; }
public PictureModel photos { get; set; }
}
public class PictureModel
{
public List<PictureData> data {get;set;}
}
public class PictureData
{
public string id { get; set; }
public string picture { get; set; }
}
公共类FacebookModel
{
公共字符串id{get;set;}
公共相册模型相册{get;set;}
}
公共类模型
{
公共列表数据{get;set;}
}
公共类数据
{
公共字符串id{get;set;}
公共字符串名称{get;set;}
公共图片模型照片{get;set;}
}
公共类图片模型
{
公共列表数据{get;set;}
}
公共类图片数据
{
公共字符串id{get;set;}
公共字符串图片{get;set;}
}
依此类推。此方法适用于任何复杂对象:
示例用法:
var complexObject=GetObjectFromJson(jsonString,typeof(YourComplexObject))
使用System.Runtime.Serialization.Json;
公共静态T GetObjectFromJson(字符串jsonString,类型)
{
var dcSerializer=新的DataContractJsonSerializer(类型);
使用(var stream=newmemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
返回(T)dcSerializer.ReadObject(流);
}
}
此方法适用于任何复杂对象:
示例用法:
var complexObject=GetObjectFromJson(jsonString,typeof(YourComplexObject))
使用System.Runtime.Serialization.Json;
公共静态T GetObjectFromJson(字符串jsonString,类型)
{
var dcSerializer=新的DataContractJsonSerializer(类型);
使用(var stream=newmemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
返回(T)dcSerializer.ReadObject(流);
}
}
此方法适用于任何复杂对象:
示例用法:
var complexObject=GetObjectFromJson(jsonString,typeof(YourComplexObject))
使用System.Runtime.Serialization.Json;
公共静态T GetObjectFromJson(字符串jsonString,类型)
{
var dcSerializer=新的DataContractJsonSerializer(类型);
使用(var stream=newmemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
返回(T)dcSerializer.ReadObject(流);
}
}
此方法适用于任何复杂对象:
示例用法:
var complexObject=GetObjectFromJson(jsonString,typeof(YourComplexObject))
使用System.Runtime.Serialization.Json;
公共静态T GetObjectFromJson(字符串jsonString,类型)
{
var dcSerializer=新的DataContractJsonSerializer(类型);
使用(var)流=