繁体   English   中英

有更好的方法吗?

[英]Is there a better approach?

使用C#; 我正在尝试创建一个Web服务,该服务将读取位于OneDrive上的Excel文件。 根据电子邮件的来源,excel文件将放在OneDrive上的文件夹中(使用流程)。 使用Microsoft图表我想根据excel文件的名称读取不同的excel文件。

读取excel文件后,将进行REST API调用。

我遇到的问题是。 如何告诉Microsoft.Graph读取excels文件,即使它们位于不同的文件夹中。 在MS-Graph中,文件夹ID从文件夹更改为文件夹。

我正在尝试获取excel文件的发货信息并发布它们。

我试过读一个文件。 很难将JSON解析成我可以使用的东西。 将键和值对分隔为对象。

我已经完成了使用Microsoft Graph的所有先决条件,包括获取访问令牌和在Azure目录上注册应用程序。

我有一个想法是为不同类型的excel文件创建一个类。

//所有身份验证后的GRAPH CALL - 授予应用程序权限

 await apiCaller.CallWebApiAndProcessResultASync("https://graph.microsoft.com/v1.0/users/['user  ID']/drive/items/['Excel ID']/workbook/worksheets/Order%20List/usedRange/", result.AccessToken, Display);
            }

///解析Json

private static void Display(JObject result)
        {
 foreach (JProperty child in result.Properties().Where(p => !p.Name.StartsWith("@")))
            {
Console.WriteLine($"{child.Name} = {child.Value}";
}

}

它假设在Key,值Pairs中解析Json。 我是初级开发人员。 我觉得这有点过头了

我相信你已经接近了正确的答案。 在编程中,如果它工作,那么它可以被认为是正确的答案,但这通常是我建议看JSON的方式。

而不是键/值对,而是考虑字段名称和该字段的值的值。 如果您使用解析器(我推荐使用Newtonsoft),那么您可以将JSON解析为适合描述的任何对象。 这是一个简单的例子:

示例:JSON可能如下所示

{ 
    "Person" : 
    {
        "firstName" : "John",
        "lastName" : "Doe",
        "DOB" : "04/29/1980"
    }
}

然后,如果你想在C#中使用那个JSON,你可以构造一个匹配它的类:

class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Date DOB { get; set; }
}

现在你可以使用像Newtonsoft这样的工具来解析它。

string json = ...//however you get the JSON
Person person = JsonConvert.DeserializeObject<Person>(json);

希望这可以帮助。

已编辑以帮助解答以下问题:

这是一个控制台应用程序,它向您展示如何将实例化类型转换为JSON字符串,然后获取JSON字符串并将其转换回实例化类型。

应用程序:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;

namespace JsonToObjectTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var children = new List<Person>()
            {
                new Person("Michael", "Puckett III", new DateTime(2000, 07, 25), null),
                new Person("Samuel", "Puckett", new DateTime(2003, 07, 23), null),
                new Person("Haylee", "Sanders", new DateTime(2004, 01, 05), null)
            };

            var dad = new Person("Michael", "Puckett II", new DateTime(1980, 01, 29), children);

            var json = JsonConvert.SerializeObject(dad); //dad with array of children is converted to a json string here

            Console.WriteLine(json); 

            var jsonDad = JsonConvert.DeserializeObject<Person>(json); //json string is converted to Person object here

            Console.WriteLine($"Name: {jsonDad.FirstName} {jsonDad.LastName}\nDOB: {jsonDad.DOB.ToString()}");

            foreach (var child in jsonDad.Children)
            {
                Console.WriteLine($"Name: {child.FirstName} {child.LastName}\nDOB: {child.DOB.ToString()}");
            }

            Console.Read();
        }

        public class Person
        {
            public Person(string firstName, string lastName, DateTime dob, List<Person> children)
            {
                FirstName = firstName;
                LastName = lastName;
                DOB = dob;
                Children = children;
            }
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public DateTime DOB { get; set; }
            public List<Person> Children { get; set; }
        }
    }
}

输出:

{"FirstName":"Michael","LastName":"Puckett II","DOB":"1980-01-29T00:00:00","Children":[{"FirstName":"Michael","LastName":"Puckett III","DOB":"2000-07-25T00:00:00","Children":null},{"FirstName":"Samuel","LastName":"Puckett","DOB":"2003-07-23T00:00:00","Children":null},{"FirstName":"Haylee","LastName":"Sanders","DOB":"2004-01-05T00:00:00","Children":null}]}
Name: Michael Puckett II
DOB: 1/29/1980 12:00:00 AM
Name: Michael Puckett III
DOB: 7/25/2000 12:00:00 AM
Name: Samuel Puckett
DOB: 7/23/2003 12:00:00 AM
Name: Haylee Sanders
DOB: 1/5/2004 12:00:00 AM

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM