Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON解析C#无名称变量_C#_Json - Fatal编程技术网

JSON解析C#无名称变量

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

我试图将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 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);
    }