JSON解析C#无名称变量
我试图将Json字符串反序列化为对象,但只返回0和null 这是我的密码:JSON解析C#无名称变量,c#,json,C#,Json,我试图将Json字符串反序列化为对象,但只返回0和null 这是我的密码: string result = "[{\"page\":1,\"pages\":1,\"per_page\":\"50\",\"total\":1},[{\"id\":\"BEL\",\"iso2Code\":\"BE\",\"name\":\"Belgium\",\"region\":{ \"id\":\"ECS\",\"value\":\"Europe & Central Asia(all income le
string result = "[{\"page\":1,\"pages\":1,\"per_page\":\"50\",\"total\":1},[{\"id\":\"BEL\",\"iso2Code\":\"BE\",\"name\":\"Belgium\",\"region\":{ \"id\":\"ECS\",\"value\":\"Europe & Central Asia(all income levels)\"},\"adminregion\":{ \"id\":\"\",\"value\":\"\"},\"incomeLevel\":{ \"id\":\"OEC\",\"value\":\"High income: OECD\"},\"lendingType\":{ \"id\":\"LNX\",\"value\":\"Not classified\"},\"capitalCity\":\"Brussels\",\"longitude\":\"4.36761\",\"latitude\":\"50.8371\"}]]";
var serializer = new DataContractJsonSerializer(typeof(LandRootObject));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(result));
var data = (LandRootObject)serializer.ReadObject(ms);
public class LandRootObject
{
public int page { get; set; }
public int pages { get; set; }
public string per_page { get; set; }
public int total { get; set; }
[DataMember]
public List<Land> land { get; set; }
}
目前,一个“每一个页面”的页面将是“50\”,“总人数”将是:1,,“总人数”将是:1,,,,[“id\”::“贝尔\”,“ISO2C码”将是一个网页,一个“网页”将是一个网页,一个网页将是一个网页,一个“网页”将是一个网页,一个网页将作为作为作为作为一个网页的“50\”,,“总人数”:1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“高收入:经合组织\“},\”贷款类型\“:{\'id\':\'LNX\',\'value\':\'Not classified\',\'capitalCity\':\'Brussel\',\'latitude\':\'4.36761\',\'latitude\':'50.8371\'”;
var serializer=newdatacontractjsonserializer(typeof(LandRootObject));
var ms=newmemoryStream(Encoding.UTF8.GetBytes(result));
var data=(LandRootObject)serializer.ReadObject(ms);
公共类LandRootObject
{
公共整型页{get;set;}
公共整型页{get;set;}
每个页面的公共字符串{get;set;}
公共整数总计{get;set;}
[数据成员]
公共列表land{get;set;}
}
谢谢!使用
列表
类型
var serializer = new DataContractJsonSerializer(typeof(List<LandRootObject>));
// ...
var data = (List<LandRootObject>)serializer.ReadObject(ms);
尝试将上述代码更改为以下代码
我已经测试了这个方法,它是有效的 您的实体类。(我没有对所有这些类进行编码。它们是使用“特殊粘贴”生成的代码。) 然后是反序列化方法。你的Json有两部分。所以我把它分成两部分进行反序列化
string result = "[{\"page\":1,\"pages\":1,\"per_page\":\"50\",\"total\":1},[{\"id\":\"BEL\",\"iso2Code\":\"BE\",\"name\":\"Belgium\",\"region\":{ \"id\":\"ECS\",\"value\":\"Europe & Central Asia(all income levels)\"},\"adminregion\":{ \"id\":\"\",\"value\":\"\"},\"incomeLevel\":{ \"id\":\"OEC\",\"value\":\"High income: OECD\"},\"lendingType\":{ \"id\":\"LNX\",\"value\":\"Not classified\"},\"capitalCity\":\"Brussels\",\"longitude\":\"4.36761\",\"latitude\":\"50.8371\"}]]";
var parts = result.Split(new[] {",["}, StringSplitOptions.None);
if (parts.Length > 1)
{
var header = parts[0].Replace("[", "");
var jsonHeader = JsonConvert.DeserializeObject<LandRootObject>(header);
var body = "[" + parts[1].Replace("]]","]");
var jsonBody = JsonConvert.DeserializeObject<List<LandBodyObject>>(body);
}
目前,一个“每一个页面”的页面将是“50\”,“总人数”将是:1,,“总人数”将是:1,,,,[“id\”::“贝尔\”,“ISO2C码”将是一个网页,一个“网页”将是一个网页,一个网页将是一个网页,一个“网页”将是一个网页,一个网页将作为作为作为作为一个网页的“50\”,,“总人数”:1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“高收入:经合组织\”\“lendingType\”:{“id\”:“LNX\”,“value\”:“Not classified\”,“capitalCity\”:“布鲁塞尔\”,“经度\”:“4.36761\”,“latitude\”:“50.8371\”)];
var parts=result.Split(new[]{,[“},StringSplitOptions.None);
如果(零件长度>1)
{
var header=parts[0]。替换(“[”,”);
var jsonHeader=JsonConvert.DeserializeObject(header);
var body=“[”+部件[1]。替换(“]]”,“]”;
var jsonBody=JsonConvert.DeserializeObject(body);
}
“返回0和null”???那又怎么样?0还是空?我假设后者,因为
0
是一个永远不会为null
的数字。是的,但是land变量和per_page可以为null,所以……)调试时,数据的内容是什么?这才是真正的问题。特别是:哪些属性是0
或null
?
ms.Position = 0; // change only this line
var data = (LandRootObject)serializer.ReadObject(ms);
public class LandRootObject
{
public int page { get; set; }
public int pages { get; set; }
public string per_page { get; set; }
public int total { get; set; }
}
public class LandBodyObject
{
public string id { get; set; }
public string iso2Code { get; set; }
public string name { get; set; }
public Region region { get; set; }
public Adminregion adminregion { get; set; }
public Incomelevel incomeLevel { get; set; }
public Lendingtype lendingType { get; set; }
public string capitalCity { get; set; }
public string longitude { get; set; }
public string latitude { get; set; }
}
public class Region
{
public string id { get; set; }
public string value { get; set; }
}
public class Adminregion
{
public string id { get; set; }
public string value { get; set; }
}
public class Incomelevel
{
public string id { get; set; }
public string value { get; set; }
}
public class Lendingtype
{
public string id { get; set; }
public string value { get; set; }
}
string result = "[{\"page\":1,\"pages\":1,\"per_page\":\"50\",\"total\":1},[{\"id\":\"BEL\",\"iso2Code\":\"BE\",\"name\":\"Belgium\",\"region\":{ \"id\":\"ECS\",\"value\":\"Europe & Central Asia(all income levels)\"},\"adminregion\":{ \"id\":\"\",\"value\":\"\"},\"incomeLevel\":{ \"id\":\"OEC\",\"value\":\"High income: OECD\"},\"lendingType\":{ \"id\":\"LNX\",\"value\":\"Not classified\"},\"capitalCity\":\"Brussels\",\"longitude\":\"4.36761\",\"latitude\":\"50.8371\"}]]";
var parts = result.Split(new[] {",["}, StringSplitOptions.None);
if (parts.Length > 1)
{
var header = parts[0].Replace("[", "");
var jsonHeader = JsonConvert.DeserializeObject<LandRootObject>(header);
var body = "[" + parts[1].Replace("]]","]");
var jsonBody = JsonConvert.DeserializeObject<List<LandBodyObject>>(body);
}