Есть ли лучший подход? - PullRequest
0 голосов
/ 14 июня 2019

Использование C #;Я пытаюсь создать веб-сервис, который будет читать файл Excel, расположенный на OneDrive.В зависимости от источника электронной почты файлы Excel будут помещены в папку на OneDrive (с использованием потока).Используя график Microsoft, я хотел бы прочитать различные файлы Excel, основанные на имени файла Excel.

После чтения файла Excel выполняется вызов REST API.

Проблема у меня возниклаимея это.Как мне сказать Microsoft.Graph read превосходит файлы, даже если они находятся в разных папках.В MS-Graph идентификатор папки меняется, от папки к папке.

Я пытаюсь получить информацию о доставке для файлов 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}";
}

}

Предполагается проанализировать Json в ключе, значение Pairs.Я младший разработчик.Я чувствую, что это немного над моей головой

1 Ответ

0 голосов
/ 14 июня 2019

Я верю, что вы близки к правильному ответу. В программировании, если это работает, то это можно считать правильным ответом, однако, как правило, я рекомендую посмотреть на JSON.

Вместо пар ключ / значение рассмотрите ключ Имя поля и Значение значение этого поля. Если вы используете парсер (я рекомендую Newtonsoft), то вы можете проанализировать JSON для любого объекта, который соответствует описаниям. Вот простой пример:

Пример: JSON может выглядеть так

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

Тогда, если вы хотите использовать этот JSON, например, в C #, вы можете создать класс, соответствующий ему:

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 и преобразовать ее обратно в экземплярный тип.

App:

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
...