C# UWP使用JSON数据创建列表

C# UWP使用JSON数据创建列表,c#,json,uwp,C#,Json,Uwp,嗯。我已向SharePoint发送GET请求,并收到返回的字符串: "{\"@odata.context\":\"https://graph.microsoft.com/v1.0/$metadata#sites('XXXXX.sharepoint.com%2C495435b4-60c3-49b7-8f6e-1d262a120ae5%2C0fad9f67-35a8-4c0b-892e-113084058c0a')/lists('18a725ac-83ef-48fb-a5cb-950ca2378fd

嗯。我已向SharePoint发送GET请求,并收到返回的字符串:

"{\"@odata.context\":\"https://graph.microsoft.com/v1.0/$metadata#sites('XXXXX.sharepoint.com%2C495435b4-60c3-49b7-8f6e-1d262a120ae5%2C0fad9f67-35a8-4c0b-892e-113084058c0a')/lists('18a725ac-83ef-48fb-a5cb-950ca2378fd0')/items\",\"value\":[{\"@odata.etag\":\"\\\"a69b1840-239d-42ed-9b20-8789761fb06a,3\\\"\",\"createdDateTime\":\"2018-08-25T22:44:16Z\",\"eTag\":\"\\\"a69b1840-239d-42ed-9b20-8789761fb06a,3\\\"\",\"id\":\"9\",\"lastModifiedDateTime\":\"2018-08-25T22:44:16Z\",\"webUrl\":\"https://XXXXX.sharepoint.com/sites/GeneratorApp/Lists/GenApp/9_.000\",\"createdBy\":{\"user\":{\"email\":\"XXXXX@XXXXX.com\",\"id\":\"b0465821-e891-4f44-9e18-27e875f1b75d\",\"displayName\":\"XXXXX\"}},\"lastModifiedBy\":{\"user\":{\"email\":\"XXXXX@XXXXX.com\",\"id\":\"b0465821-e891-4f44-9e18-27e875f1b75d\",\"displayName\":\"XXXXX\"}},\"parentReference\":{},\"contentType\":{\"id\":\"0x0100E19591A4ECA81542AEA41A6AAFED6781\"},\"fields@odata.context\":\"https://graph.microsoft.com/v1.0/$metadata#sites('XXXXX.sharepoint.com%2C495435b4-60c3-49b7-8f6e-1d262a120ae5%2C0fad9f67-35a8-4c0b-892e-113084058c0a')/lists('18a725ac-83ef-48fb-a5cb-950ca2378fd0')/items('9')/fields/$entity\",\"fields\":{\"@odata.etag\":\"\\\"a69b1840-239d-42ed-9b20-8789761fb06a,3\\\"\",\"SerialNumber\":\"20180824-1353-DC6-Generator-A\",\"id\":\"9\"}},{\"@odata.etag\":\"\\\"13f60f9e-1bf2-4803-93b9-c45234963d47,3\\\"\",\"createdDateTime\":\"2018-08-25T22:45:55Z\",\"eTag\":\"\\\"13f60f9e-1bf2-4803-93b9-c45234963d47,3\\\"\",\"id\":\"10\",\"lastModifiedDateTime\":\"2018-08-25T22:45:55Z\",\"webUrl\":\"https://XXXXX.sharepoint.com/sites/GeneratorApp/Lists/GenApp/10_.000\",\"createdBy\":{\"user\":{\"email\":\"XXXXX@XXXXX.com\",\"id\":\"b0465821-e891-4f44-9e18-27e875f1b75d\",\"displayName\":\"XXXXX\"}},\"lastModifiedBy\":{\"user\":{\"email\":\"XXXXX@XXXXX.com\",\"id\":\"b0465821-e891-4f44-9e18-27e875f1b75d\",\"displayName\":\"XXXXX\"}},\"parentReference\":{},\"contentType\":{\"id\":\"0x0100E19591A4ECA81542AEA41A6AAFED6781\"},\"fields@odata.context\":\"https://graph.microsoft.com/v1.0/$metadata#sites('XXXXX.sharepoint.com%2C495435b4-60c3-49b7-8f6e-1d262a120ae5%2C0fad9f67-35a8-4c0b-892e-113084058c0a')/lists('18a725ac-83ef-48fb-a5cb-950ca2378fd0')/items('10')/fields/$entity\",\"fields\":{\"@odata.etag\":\"\\\"13f60f9e-1bf2-4803-93b9-c45234963d47,3\\\"\",\"SerialNumber\":\"20180824-1416-DC6-Generator-B\",\"id\":\"10\"}},{\"@odata.etag\":\"\\\"00024848-0d4e-4ee8-b018-f1653af2a577,3\\\"\",\"createdDateTime\":\"2018-08-25T22:47:30Z\",\"eTag\":\"\\\"00024848-0d4e-4ee8-b018-f1653af2a577,3\\\"\",\"id\":\"11\",\"lastModifiedDateTime\":\"2018-08-25T22:47:30Z\",\"webUrl\":\"https://XXXXX.sharepoint.com/sites/GeneratorApp/Lists/GenApp/11_.000\",\"createdBy\":{\"user\":{\"email\":\"XXXXX@XXXXX.com\",\"id\":\"b0465821-e891-4f44-9e18-27e875f1b75d\",\"displayName\":\"XXXXX\"}},\"lastModifiedBy\":{\"user\":{\"email\":\"XXXXX@XXXXX.com\",\"id\":\"b0465821-e891-4f44-9e18-27e875f1b75d\",\"displayName\":\"XXXXX\"}},\"parentReference\":{},\"contentType\":{\"id\":\"0x0100E19591A4ECA81542AEA41A6AAFED6781\"},\"fields@odata.context\":\"https://graph.microsoft.com/v1.0/$metadata#sites('XXXXX.sharepoint.com%2C495435b4-60c3-49b7-8f6e-1d262a120ae5%2C0fad9f67-35a8-4c0b-892e-113084058c0a')/lists('18a725ac-83ef-48fb-a5cb-950ca2378fd0')/items('11')/fields/$entity\",\"fields\":{\"@odata.etag\":\"\\\"00024848-0d4e-4ee8-b018-f1653af2a577,3\\\"\",\"SerialNumber\":\"20180824-1438-DC6-Generator-R\",\"id\":\"11\"}},{\"@odata.etag\":\"\\\"7c8e80ed-6fea-408a-9594-2b7b13e3691b,3\\\"\",\"createdDateTime\":\"2018-08-25T23:02:43Z\",\"eTag\":\"\\\"7c8e80ed-6fea-408a-9594-2b7b13e3691b,3\\\"\",\"id\":\"12\",\"lastModifiedDateTime\":\"2018-08-25T23:02:43Z\",\"webUrl\":\"https://XXXXX.sharepoint.com/sites/GeneratorApp/Lists/GenApp/12_.000\",\"createdBy\":{\"user\":{\"email\":\"XXXXX@XXXXX.com\",\"id\":\"b0465821-e891-4f44-9e18-27e875f1b75d\",\"displayName\":\"XXXXX\"}},\"lastModifiedBy\":{\"user\":{\"email\":\"XXXXX@XXXXX.com\",\"id\":\"b0465821-e891-4f44-9e18-27e875f1b75d\",\"displayName\":\"XXXXX\"}},\"parentReference\":{},\"contentType\":{\"id\":\"0x0100E19591A4ECA81542AEA41A6AAFED6781\"},\"fields@odata.context\":\"https://graph.microsoft.com/v1.0/$metadata#sites('XXXXX.sharepoint.com%2C495435b4-60c3-49b7-8f6e-1d262a120ae5%2C0fad9f67-35a8-4c0b-892e-113084058c0a')/lists('18a725ac-83ef-48fb-a5cb-950ca2378fd0')/items('12')/fields/$entity\",\"fields\":{\"@odata.etag\":\"\\\"7c8e80ed-6fea-408a-9594-2b7b13e3691b,3\\\"\",\"SerialNumber\":\"20180824-1456-DC6-Generator-C\",\"id\":\"12\"}}]}"
将JObject.Parse解析为以下内容:

{{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites('XXXXX.sharepoint.com%2C495435b4-60c3-49b7-8f6e-1d262a120ae5%2C0fad9f67-35a8-4c0b-892e-113084058c0a')/lists('18a725ac-83ef-48fb-a5cb-950ca2378fd0')/items",
  "value": [
    {
      "@odata.etag": "\"a69b1840-239d-42ed-9b20-8789761fb06a,3\"",
      "createdDateTime": "2018-08-25T22:44:16Z",
      "eTag": "\"a69b1840-239d-42ed-9b20-8789761fb06a,3\"",
      "id": "9",
      "lastModifiedDateTime": "2018-08-25T22:44:16Z",
      "webUrl": "https://XXXXX.sharepoint.com/sites/GeneratorApp/Lists/GenApp/9_.000",
      "createdBy": {
        "user": {
          "email": "XXXXX@XXXXX.com",
          "id": "b0465821-e891-4f44-9e18-27e875f1b75d",
          "displayName": "XXXXX"
        }
      },
      "lastModifiedBy": {
        "user": {
          "email": "XXXXX@XXXXX.com",
          "id": "b0465821-e891-4f44-9e18-27e875f1b75d",
          "displayName": "XXXXX"
        }
      },
      "parentReference": {},
      "contentType": {
        "id": "0x0100E19591A4ECA81542AEA41A6AAFED6781"
      },
      "fields@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites('XXXXX.sharepoint.com%2C495435b4-60c3-49b7-8f6e-1d262a120ae5%2C0fad9f67-35a8-4c0b-892e-113084058c0a')/lists('18a725ac-83ef-48fb-a5cb-950ca2378fd0')/items('9')/fields/$entity",
      "fields": {
        "@odata.etag": "\"a69b1840-239d-42ed-9b20-8789761fb06a,3\"",
        "SerialNumber": "20180824-1353-DC6-Generator-A",
        "id": "9"
      }
    },
    {
      "@odata.etag": "\"13f60f9e-1bf2-4803-93b9-c45234963d47,3\"",
      "createdDateTime": "2018-08-25T22:45:55Z",
      "eTag": "\"13f60f9e-1bf2-4803-93b9-c45234963d47,3\"",
      "id": "10",
      "lastModifiedDateTime": "2018-08-25T22:45:55Z",
      "webUrl": "https://XXXXX.sharepoint.com/sites/GeneratorApp/Lists/GenApp/10_.000",
      "createdBy": {
        "user": {
          "email": "XXXXX@XXXXX.com",
          "id": "b0465821-e891-4f44-9e18-27e875f1b75d",
          "displayName": "XXXXX"
        }
      },
      "lastModifiedBy": {
        "user": {
          "email": "XXXXX@XXXXX.com",
          "id": "b0465821-e891-4f44-9e18-27e875f1b75d",
          "displayName": "XXXXX"
        }
      },
      "parentReference": {},
      "contentType": {
        "id": "0x0100E19591A4ECA81542AEA41A6AAFED6781"
      },
      "fields@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites('XXXXX.sharepoint.com%2C495435b4-60c3-49b7-8f6e-1d262a120ae5%2C0fad9f67-35a8-4c0b-892e-113084058c0a')/lists('18a725ac-83ef-48fb-a5cb-950ca2378fd0')/items('10')/fields/$entity",
      "fields": {
        "@odata.etag": "\"13f60f9e-1bf2-4803-93b9-c45234963d47,3\"",
        "SerialNumber": "20180824-1416-DC6-Generator-B",
        "id": "10"
      }
    },
    {
      "@odata.etag": "\"00024848-0d4e-4ee8-b018-f1653af2a577,3\"",
      "createdDateTime": "2018-08-25T22:47:30Z",
      "eTag": "\"00024848-0d4e-4ee8-b018-f1653af2a577,3\"",
      "id": "11",
      "lastModifiedDateTime": "2018-08-25T22:47:30Z",
      "webUrl": "https://XXXXX.sharepoint.com/sites/GeneratorApp/Lists/GenApp/11_.000",
      "createdBy": {
        "user": {
          "email": "XXXXX@XXXXX.com",
          "id": "b0465821-e891-4f44-9e18-27e875f1b75d",
          "displayName": "XXXXX"
        }
      },
      "lastModifiedBy": {
        "user": {
          "email": "XXXXX@XXXXX.com",
          "id": "b0465821-e891-4f44-9e18-27e875f1b75d",
          "displayName": "XXXXX"
        }
      },
      "parentReference": {},
      "contentType": {
        "id": "0x0100E19591A4ECA81542AEA41A6AAFED6781"
      },
      "fields@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites('XXXXX.sharepoint.com%2C495435b4-60c3-49b7-8f6e-1d262a120ae5%2C0fad9f67-35a8-4c0b-892e-113084058c0a')/lists('18a725ac-83ef-48fb-a5cb-950ca2378fd0')/items('11')/fields/$entity",
      "fields": {
        "@odata.etag": "\"00024848-0d4e-4ee8-b018-f1653af2a577,3\"",
        "SerialNumber": "20180824-1438-DC6-Generator-R",
        "id": "11"
      }
    },
    {
      "@odata.etag": "\"7c8e80ed-6fea-408a-9594-2b7b13e3691b,3\"",
      "createdDateTime": "2018-08-25T23:02:43Z",
      "eTag": "\"7c8e80ed-6fea-408a-9594-2b7b13e3691b,3\"",
      "id": "12",
      "lastModifiedDateTime": "2018-08-25T23:02:43Z",
      "webUrl": "https://XXXXX.sharepoint.com/sites/GeneratorApp/Lists/GenApp/12_.000",
      "createdBy": {
        "user": {
          "email": "XXXXX@XXXXX.com",
          "id": "b0465821-e891-4f44-9e18-27e875f1b75d",
          "displayName": "XXXXX"
        }
      },
      "lastModifiedBy": {
        "user": {
          "email": "XXXXX@XXXXX.com",
          "id": "b0465821-e891-4f44-9e18-27e875f1b75d",
          "displayName": "XXXXX"
        }
      },
      "parentReference": {},
      "contentType": {
        "id": "0x0100E19591A4ECA81542AEA41A6AAFED6781"
      },
      "fields@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites('XXXXX.sharepoint.com%2C495435b4-60c3-49b7-8f6e-1d262a120ae5%2C0fad9f67-35a8-4c0b-892e-113084058c0a')/lists('18a725ac-83ef-48fb-a5cb-950ca2378fd0')/items('12')/fields/$entity",
      "fields": {
        "@odata.etag": "\"7c8e80ed-6fea-408a-9594-2b7b13e3691b,3\"",
        "SerialNumber": "20180824-1456-DC6-Generator-C",
        "id": "12"
      }
    }
  ]
}}
我最终想要做的是创建一个用SerialNumber填充的下拉列表。当在下拉列表中选择SerialNumber时,它将返回id,这样我就可以将其插入GET请求以检索适当的listitems

我试图弄清楚我是否需要做一个foreach来创建一个列表或其他东西

我确实有这样的课程设置,但不确定我是否能以我认为可以的方式使用它

public class Lookup
{
    string id { get; set; };
    string SerialNumber { get; set; }
}
这是最终工作代码:

    private async void GetButton_Click(object sender, RoutedEventArgs e)
    {
        var (authResult, message) = await Authentication.AquireTokenAsync();
        ResultText.Text = message;

        if (authResult != null)
        {
            var httpClient = new HttpClient();
            HttpResponseMessage response;
            var request = new HttpRequestMessage(HttpMethod.Get, geturl);
            //Add the token in Authorization header
            request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authResult.AccessToken);
            response = await httpClient.SendAsync(request);
            var content = await response.Content.ReadAsStringAsync();
            JObject json = JObject.Parse(content);
            var result = JsonConvert.DeserializeObject<SharePointListItems.RootObject>(content);
            foreach (var d in result.value)
            {
                Lookups.Add(new SharePointListItems.Lookup() { id = d.fields.id, SerialNumber = d.fields.SerialNumber });
            }
            TestComboBox.ItemsSource = Lookups;
        }
    }

    private void TestComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (TestComboBox.SelectedIndex != -1)
        {
            var mylookupId = (TestComboBox.SelectedItem as SharePointListItems.Lookup).id;// get your id and do further processing here.
            ResultText.Text = mylookupId;
        }
    }

public class SharePointListItems
{
    public class Lookup
    {
        public string SerialNumber { get; set; }
        public string id { get; set; }
        public override string ToString()
        {
            return SerialNumber;
        }
    }

    public class Value
    {
        public Lookup fields { get; set; }
    }

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

        ...
    }

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

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

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

        public Fields Fields { get; set; }

        public List<Value> value { get; set; }
    }    
}
private async void GetButton\u单击(对象发送方,路由目标)
{
var(authResult,message)=等待身份验证。AquireTokenAsync();
ResultText.Text=消息;
if(authResult!=null)
{
var httpClient=新的httpClient();
HttpResponseMessage响应;
var request=newhttprequestmessage(HttpMethod.Get,geturl);
//在授权标头中添加令牌
request.Headers.Authorization=new System.Net.Http.Headers.AuthenticationHeaderValue(“Bearer”,authResult.AccessToken);
响应=等待httpClient.SendAsync(请求);
var content=await response.content.ReadAsStringAsync();
JObject json=JObject.Parse(内容);
var result=JsonConvert.DeserializeObject(内容);
foreach(result.value中的变量d)
{
添加(新的SharePointListItems.Lookup(){id=d.fields.id,SerialNumber=d.fields.SerialNumber});
}
TestComboBox.ItemsSource=查找;
}
}
private void TestComboBox_SelectionChanged(对象发送方,SelectionChangedEventArgs e)
{
如果(TestComboBox.SelectedIndex!=-1)
{
var mylookupId=(TestComboBox.SelectedItem作为SharePointListItems.Lookup).id;//获取您的id并在此处进行进一步处理。
ResultText.Text=mylookupId;
}
}
公共类SharePointListItems
{
公共类查找
{
公共字符串序列号{get;set;}
公共字符串id{get;set;}
公共重写字符串ToString()
{
返回序列号;
}
}
公共阶级价值
{
公共查找字段{get;set;}
}
公共类字段
{
[JsonProperty(“@odata.etag”)]
公共字符串标记{get;set;}
...
}
公共类根对象
{
[JsonProperty(“@odata.context”)]
公共字符串ODataContext{get;set;}
[JsonProperty(“@odata.etag”)]
公共字符串标记{get;set;}
[JsonProperty(”fields@odata.context")]
公共字符串FieldsDataContext{get;set;}
公共字段{get;set;}
公共列表值{get;set;}
}    
}

有两种方法可以轻松创建模型

  • 您可以在VisualStudio中使用WebEssentials,使用Edit>Paste special>Paste JSON作为类,您可以更容易地了解JSON和模型之间的关系

  • 如果您不能使用WebEssentials,您可以使用在线JSON来为类建模

  • 您可以尝试使用这些模型来携带JSON格式

    public class Lookup
    {
        public string SerialNumber { get; set; }
        public string id { get; set; }
    }
    
    public class Value
    {
        public Lookup fields { get; set; }
    }
    
    public class RootObject
    {
        public List<Value> value { get; set; }
    }
    

    我认为这在使用newtonsoft时会很容易:

    var dynamicObject = JObject.Parse(yourstring);
    var list = new List<Lookup>();
    //now you have a dynamic object containing an array.
    //this should be doable with linq as well.
    //note, the type is dynamic
    foreach (dynamic thing in dynamicObject )
    {
       list.Add(new Lookup()
       {
          id = thing.fields.id,
          SerialNumber = thing.fields.SerialNumber
       });
    }
    
    var dynamicObject=JObject.Parse(yourstring);
    var list=新列表();
    //现在您有了一个包含数组的动态对象。
    //这对于linq也是可行的。
    //注意,类型是动态的
    foreach(dynamicObject中的动态对象)
    {
    添加(新的查找()
    {
    id=thing.fields.id,
    SerialNumber=thing.fields.SerialNumber
    });
    }
    

    免责声明:未以任何方式进行测试;-)

    关于如何将数据列表绑定到组合框(下拉列表)的一个好例子如下:

    在本例中,类是一个学生,具有id名称,它显示了如何在组合框中显示名称

    我将根据您的场景对其进行一些修改,但如果您想深入了解,可以访问上面提供的链接

    这是一门课

    用于将项目添加到列表的后端


    感谢您提供有关Web Essentials的信息。我不知道这个扩展,它肯定会派上用场的。我花了一分钟的时间才明白这个想法,但这很有效。我将把我的最终编码添加到我的帖子中。
    var dynamicObject = JObject.Parse(yourstring);
    var list = new List<Lookup>();
    //now you have a dynamic object containing an array.
    //this should be doable with linq as well.
    //note, the type is dynamic
    foreach (dynamic thing in dynamicObject )
    {
       list.Add(new Lookup()
       {
          id = thing.fields.id,
          SerialNumber = thing.fields.SerialNumber
       });
    }
    
    public class Fields
    {
        public string SerialNumber { get; set; }
        public string id { get; set; }
        public override string ToString() 
        {  
            return this.SerialNumber; // so that we can just bind to the object and get serial number in the ui. 
        }
    }  
    
    public sealed partial class MainPage: Page 
    {  
        List<Lookup> Lookups = new List<Lookup>();  
        public MainPage() 
        {  
            this.InitializeComponent();  
            Lookups.Add(new Lookup() {id = 1, SerialNumber = "S1"});  
            Lookups.Add(new Lookup() {id = 2, SerialNumber = "S2"}); 
            Lookups.Add(new Lookup() {id = 3, SerialNumber = "S3"});  
            Lookups.Add(new Lookup() {id = 4, SerialNumber = "S4"}); 
            //add as many items here as u want, u can even use a for loop or foreach loop or a Deserializer with newsoft json to get objects from ur json like below.
            //var data = JsonConvert.DeserializeObject<RootObject>(jsonData);
            //foreach (var d in data.value)
            //{
            //    //d.fields.id //this is how u can get the inside properties.
            //}
            yourComboBox.ItemSource = Lookups;//setting item source to UI.
        } 
    }
    
    void MyComboBox_SelectionChanged(object sender, object args)
    {
        if(MyCombobox.SelectedIndex!=-1)
        {
            var mylookupId = (MyCombobox.SelectedItem as Lookup).id;// get your id and do further processing here.
        }
    }