从JSON Odata列表中获取UWP

时间:2018-08-11 18:38:29

标签: json uwp odata

我一直很难弄清楚,现在我已经把头发全部拔掉了。

使用这部分代码(添加了我用停止点查看的var结果):

public async Task<string> GetHttpSPContentWithToken(string url, string token)
    {
        var httpClient = new System.Net.Http.HttpClient();
        System.Net.Http.HttpResponseMessage response;
        try
        {
            var request = new System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Get, url);
            //Add the token in Authorization header
            request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
           response = await httpClient.SendAsync(request);
            var content = await response.Content.ReadAsStringAsync();
            var result = JsonConvert.DeserializeObject<SharePointListItems.Fields>(content);
            return content;
        }
        catch (Exception ex)
        {
            return ex.ToString();
        }
    }

我收到的内容是这样(更新后不再包含其他信息):

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites('root')/lists('FBA0AB63-8453-4BB9-AA17-142A5D72A50D')/items/$entity",
  "@odata.etag": "\"60d40002-0f08-4f29-afa7-0287137b863b,1\"",
  "createdDateTime": "2018-08-07T14:28:47Z",
  "eTag": "\"60d40002-0f08-4f29-afa7-0287137b863b,1\"",
  "id": "1",
  "lastModifiedDateTime": "2018-08-07T14:28:47Z",
  "webUrl": "https://XXXX.sharepoint.com/Lists/TestList/1_.000",
  "createdBy": {
    "user": {
      "email": "XXXX@XXXX.onmicrosoft.com",
      "id": "b5f81cc6-f8b7-46b7-8e10-6ce1b9689c23",
      "displayName": "TK"
    }
  },
  "lastModifiedBy": {
    "user": {
      "email": "XXXX@XXXX.onmicrosoft.com",
      "id": "b5f81cc6-f8b7-46b7-8e10-6ce1b9689c23",
      "displayName": "TK"
    }
  },
  "parentReference": {},
  "contentType": {
    "id": "0x010001403BD420356E4ABE3B63E5AEC0713D"
  },
  "fields@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites('root')/lists('FBA0AB63-8453-4BB9-AA17-142A5D72A50D')/items('1')/fields/$entity",
  "fields": {
    "@odata.etag": "\"60d40002-0f08-4f29-afa7-0287137b863b,1\"",
    "Title": "1",
    "UserName": "TK",
    "UserAge": "47",
    "UserTitle": "Developer"
  }
}

我只希望将UserAge,UserName和UserTitle的值放入文本框,但不确定如何将它们拉出。

我很确定我需要设置某种类型的类,但是@odata部分让我不寒而栗。

我尝试过的所有内容都给了我一个空值。我在那里看到了值,只是不确定如何解析/提取它。

我已经看过这个了(更新):

using Newtonsoft.Json;
using System;

public class SharePointListItems
{
    public class UserCreated
    {
        public string email { get; set; }
        public string id { get; set; }
        public string displayName { get; set; }
    }

    public class CreatedBy
    {
        public UserCreated user { get; set; }
    }

    public class UserModified
    {
        public string email { get; set; }
        public string id { get; set; }
        public string displayName { get; set; }
    }

    public class LastModifiedBy
    {
        public UserModified user { get; set; }
    }

    public class ParentReference
    {
    }

    public class ContentType
    {
        public string id { get; set; }
    }

    public class Fields
    {
        [JsonProperty("@odata.etag")]
        public string ODataETag { get; set; }

        public string Title { get; set; }
        public string UserName { get; set; }
        public string UserAge { get; set; }
        public string UserTitle { get; set; }
    }

    public class RootObject
    {
        [JsonProperty("@odata.context")]
        public string ODataContext { get; set; }

        [JsonProperty("@odata.etag")]
        public string ODataETag { get; set; }

        public DateTime createdDateTime { get; set; }
        public string eTag { get; set; }
        public string id { get; set; }
        public DateTime lastModifiedDateTime { get; set; }
        public string webUrl { get; set; }
        public CreatedBy createdBy { get; set; }
        public LastModifiedBy lastModifiedBy { get; set; }
        public ParentReference parentReference { get; set; }
        public ContentType contentType { get; set; }

        [JsonProperty("fields@odata.context")]
        public string FieldsODataContext { get; set; }

        public Fields fields { get; set; }
    }
}

但是随后我遇到了两个[JsonProperty(“ @ odata.etag”)]的问题。

1 个答案:

答案 0 :(得分:1)

state_pressed自定义属性被添加到实际上包含该值的C#属性中。不必将属性放在[JsonProperty]Title属性上,您需要将它们放在自己的属性上:

createDateTime

此外,您尝试将内容解析为public class RootObject { [JsonProperty("@odata.context")] public string ODataContext { get; set; } [JsonProperty("@odata.etag")] public string ODataETag { get; set; } // No attribute needed here public DateTime createdDateTime { get; set; } // etc... 类,但它是Fields;您需要使用

RootObject

获取对象。