有更好的方法吗?
Is there a better approach?
使用 C#;我正在尝试创建一个 Web 服务,它将读取位于 OneDrive 上的 excel 文件。根据电子邮件的来源,excel 文件将放置在 OneDrive 上的一个文件夹中(使用流程)。使用 Microsoft graph 我想根据 excel 文件的名称读取不同的 excel 文件。
读取 excel 文件后,将进行 REST API 调用。
我遇到的问题是。如何告诉 Microsoft.Graph 读取 excels 个文件,即使它们位于不同的文件夹中。在 MS-Graph 中,文件夹 ID 随文件夹而变化。
我正在尝试获取 excel 个文件和 POST 个文件的运送信息。
我试过读取一个文件。很难将 JSON 解析为我可以使用的东西。将键和值对分离到对象中。
我完成了能够使用 Microsoft Graph 的所有先决条件,包括获取访问令牌并在 Azure 目录上注册应用程序。
我的一个想法是为不同类型的 excel 文件制作一个 class。
//所有身份验证后的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, value Pairs中的Json。我是一名初级开发人员。我觉得这有点让我头疼
我相信您已经接近找到正确答案了。在编程中,如果它有效,那么它可以被认为是正确的答案,但是这通常是我建议查看 JSON 的方式。
不考虑键/值对,而是考虑字段名称的键和该字段的值的值。如果您使用解析器(我推荐 Newtonsoft),那么您可以将 JSON 解析为符合描述的任何对象。这是一个简单的例子:
示例:
JSON 可能看起来像这样
{
"Person" :
{
"firstName" : "John",
"lastName" : "Doe",
"DOB" : "04/29/1980"
}
}
然后,如果您想在 C# 中使用 JSON,您可以构造一个匹配它的 class:
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
使用 C#;我正在尝试创建一个 Web 服务,它将读取位于 OneDrive 上的 excel 文件。根据电子邮件的来源,excel 文件将放置在 OneDrive 上的一个文件夹中(使用流程)。使用 Microsoft graph 我想根据 excel 文件的名称读取不同的 excel 文件。
读取 excel 文件后,将进行 REST API 调用。
我遇到的问题是。如何告诉 Microsoft.Graph 读取 excels 个文件,即使它们位于不同的文件夹中。在 MS-Graph 中,文件夹 ID 随文件夹而变化。
我正在尝试获取 excel 个文件和 POST 个文件的运送信息。
我试过读取一个文件。很难将 JSON 解析为我可以使用的东西。将键和值对分离到对象中。
我完成了能够使用 Microsoft Graph 的所有先决条件,包括获取访问令牌并在 Azure 目录上注册应用程序。
我的一个想法是为不同类型的 excel 文件制作一个 class。
//所有身份验证后的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, value Pairs中的Json。我是一名初级开发人员。我觉得这有点让我头疼
我相信您已经接近找到正确答案了。在编程中,如果它有效,那么它可以被认为是正确的答案,但是这通常是我建议查看 JSON 的方式。
不考虑键/值对,而是考虑字段名称的键和该字段的值的值。如果您使用解析器(我推荐 Newtonsoft),那么您可以将 JSON 解析为符合描述的任何对象。这是一个简单的例子:
示例: JSON 可能看起来像这样
{
"Person" :
{
"firstName" : "John",
"lastName" : "Doe",
"DOB" : "04/29/1980"
}
}
然后,如果您想在 C# 中使用 JSON,您可以构造一个匹配它的 class:
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