You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

87 lines
3.2 KiB

using Microsoft.AspNetCore.Builder;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Diagnostics;
namespace ReZero.Configuration
{
public class ApiConfiguration
{
/// <summary>
/// 获取当前DLL文件的完整路径。
/// </summary>
/// <returns>DLL文件的完整路径。</returns>
public static string GetCurrentDllFullPath()
{
var assembly = Assembly.GetExecutingAssembly();
return assembly.Location;
}
// 获取当前执行程序(EXE)的完整路径
public static string GetCurrentExeFullPath()
{
return Process.GetCurrentProcess().MainModule.FileName;
}
// 获取当前执行程序(EXE)的目录
public static string GetCurrentExeDirectory()
{
return Path.GetDirectoryName(GetCurrentExeFullPath());
}
/// <summary>
/// 从JSON文件中读取并反序列化指定键的值到泛型类型T。
/// </summary>
/// <typeparam name="T">要反序列化的目标类型。</typeparam>
/// <param name="key">JSON对象中的键。</param>
/// <param name="fileName">JSON文件的名称,默认为"appsettings.json"。如果文件位于DLL相同目录,则只需文件名;否则,需要提供完整路径。</param>
/// <returns>反序列化后的对象。</returns>
public static T GetJsonValue<T>(string key, string fileName = "appsettings.json")
{
string fullPath = Path.Combine(GetCurrentExeDirectory(), fileName);
if (!File.Exists(fullPath))
{
// 获取DLL的目录路径
string dllPath = Path.GetDirectoryName(GetCurrentDllFullPath());
fullPath =Path.Combine(dllPath, fileName);
}
// 读取JSON文件内容
string jsonContent = File.ReadAllText(fullPath, Encoding.UTF8);
try
{
// 解析JSON内容为JObject
JObject jsonObject = JObject.Parse(jsonContent);
// 根据提供的键获取对应的JToken
JToken? token = jsonObject.SelectToken(key!);
if (token != null)
{
// 将JToken反序列化为泛型类型T
return token.ToObject<T>();
}
else
{
throw new ArgumentException($"GetJsonValue<{typeof(T).Name}>() error。The specified key '{key}' was not found in the JSON file.");
}
}
catch (JsonReaderException ex)
{
throw new InvalidOperationException($"GetJsonValue<{typeof(T).Name}>() error。Error parsing JSON file at path: {fullPath}", ex);
}
catch (FileNotFoundException ex)
{
throw new FileNotFoundException($"GetJsonValue<{typeof(T).Name}>() error。The JSON file was not found at path: {fullPath}", ex);
}
}
}
}