Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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
C# 反序列化Onedrive REST数据_C#_Json_Onedrive - Fatal编程技术网

C# 反序列化Onedrive REST数据

C# 反序列化Onedrive REST数据,c#,json,onedrive,C#,Json,Onedrive,我正在使用OneDrive,需要从服务器获取有关文件夹内容的信息。这是我正在处理的数据类型: { "data": [ { "id": "folder.xxxx", "from": { "name": "john doe", "id": "xxxx" }, "name": "Files that are in a folder", "de

我正在使用OneDrive,需要从服务器获取有关文件夹内容的信息。这是我正在处理的数据类型:

{


"data": [
      {
         "id": "folder.xxxx", 
         "from": {
            "name": "john doe", 
            "id": "xxxx"
         }, 
         "name": "Files that are in a folder", 
         "description": "", 
         "parent_id": "folder.xxxx", 
         "size": 0, 
         "upload_location": "https://apis.live.net/v5.0/folder.xxxx/files/", 
         "comments_count": 0, 
         "comments_enabled": false, 
         "is_embeddable": true, 
         "count": 0, 
         "link": "xxxx", 
         "type": "folder", 
         "shared_with": {
            "access": "Just me"
         }, 
         "created_time": "2014-03-06T18:48:16+0000", 
         "updated_time": "2014-03-06T18:48:16+0000", 
         "client_updated_time": "2014-03-06T18:48:16+0000"
      }, {
         "id": "file.xxxx", 
         (same as above for rest of data structure)
      }, {
         "id": "file.xxxx", 
         (Same as above for rest of data structure)
      }
   ]
}
当对服务器执行不同的请求时,您只会返回(“id”:“folder.xxx”)信息块,我可以使用如下所示的类处理该数据:

[DataContract]
    public class ResponseFolder
    {
        [DataMember(Name = "id")]
        public string id { get; set; }
        [DataMember(Name = "from")]
        public from from { get; set; }
        [DataMember(Name = "name")]
        public string name { get; set; }
        //etc.
以及处理类似结构的“from”等条目:

[DataContract]
    public class from
    {
        public string name { get; set; }
        public string id { get; set; }
    }
我想我可以对顶部的数据请求执行相同的操作,因此有一个不适合我的类:

[DataContract]
    public class FolderRequest
    {
        [DataMember(Name = "data")]
        public ResponseFolder data { get; set; }
    }
我试着在这一行中使用它:

FolderRequest = jss.Deserialize<FolderRequest>(json);
FolderRequest=jss.Deserialize(json);
但是FolderRequest在此之后为null。我也试过这样做

jss.Deserialize<List<ResponseFolder>>(json);
jss.Deserialize(json);
在谷歌搜索了如何处理json中的数组之后,这也不起作用


任何帮助都将不胜感激

看起来数据需要是一个数组:

[DataContract]
public class FolderRequest
{
    [DataMember(Name = "data")]
    public ResponseFolder[] data { get; set; }
}

你的完整模型是

public class From
{
    public string name { get; set; }
    public string id { get; set; }
}

public class SharedWith
{
    public string access { get; set; }
}

public class ResponseFolder
{
    public string id { get; set; }
    public From from { get; set; }
    public string name { get; set; }
    public string description { get; set; }
    public string parent_id { get; set; }
    public int size { get; set; }
    public string upload_location { get; set; }
    public int comments_count { get; set; }
    public bool comments_enabled { get; set; }
    public bool is_embeddable { get; set; }
    public int count { get; set; }
    public string link { get; set; }
    public string type { get; set; }
    public SharedWith shared_with { get; set; }
    public string created_time { get; set; }
    public string updated_time { get; set; }
    public string client_updated_time { get; set; }
}

public class FolderRequest
{
    public List<ResponseFolder> data { get; set; }
}
来自的公共类
{
公共字符串名称{get;set;}
公共字符串id{get;set;}
}
与共享的公共类
{
公共字符串访问{get;set;}
}
公共类响应文件夹
{
公共字符串id{get;set;}
来自{get;set;}的公共
公共字符串名称{get;set;}
公共字符串说明{get;set;}
公共字符串父\u id{get;set;}
公共整数大小{get;set;}
公共字符串上载位置{get;set;}
public int comments_count{get;set;}
公共bool注释启用{get;set;}
公共布尔是可嵌入的{get;set;}
公共整数计数{get;set;}
公共字符串链接{get;set;}
公共字符串类型{get;set;}
与{get;set;}共享_的公共共享
创建的公共字符串\u time{get;set;}
公共字符串已更新_time{get;set;}
公共字符串客户端\u已更新\u时间{get;set;}
}
公共类FolderRequest
{
公共列表数据{get;set;}
}
您应该序列化为

var obj = new JavaScriptSerializer().Deserialize<FolderRequest>(DATA);
var obj=new JavaScriptSerializer()。反序列化(数据);

如果您同意使用Json.Net(),请尝试以下方法:

public class From
{
    public string Name { get; set; }

    public string Id { get; set; }
}

public class SharedWith
{
    [JsonProperty(PropertyName = "access")]
    public string AccessName { get; set; }
}

public class ResponseFolder
{
    public string Id { get; set; }

    public From From { get; set; }

    public string Name { get; set; }

    public string Description { get; set; }

    [JsonProperty(PropertyName = "shared_with")]
    public SharedWith SharedWith { get; set; }
}

public class RootObject
{
    public List<ResponseFolder> data { get; set; }
}
来自的公共类
{
公共字符串名称{get;set;}
公共字符串Id{get;set;}
}
与共享的公共类
{
[JsonProperty(PropertyName=“access”)]
公共字符串AccessName{get;set;}
}
公共类响应文件夹
{
公共字符串Id{get;set;}
来自{get;set;}的公共
公共字符串名称{get;set;}
公共字符串说明{get;set;}
[JsonProperty(PropertyName=“与共享”)]
公共SharedWith SharedWith{get;set;}
}
公共类根对象
{
公共列表数据{get;set;}
}
然后进行反序列化:

var result = JsonConvert.DeserializeObject<RootObject>(json);
var result=JsonConvert.DeserializeObject(json);
希望这有帮助