在另一个项目中读取JSON文件时出现问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在另一个项目中读取JSON文件时出现问题相关的知识,希望对你有一定的参考价值。
在另一个项目中读取JSON文件时出现问题
伙计们,我在阅读另一个项目中的某个Json文件时遇到了麻烦。我做了一个示例项目,具有以下结构。 Sample.UI.MVC,Sample.Infra.Data,Sample.Domain,Sample.Application。在Sample.UI.MVC层中,我在Startup.cs文件中初始化Sample.Infra.Data项目中的一个类,该项在我的数据库中动态生成Seeds。但是,由于EF Core正在尝试获取Sample.UI.MVC层内的JSON文件而不是Sample.Infra.Data内部,因此发生错误。
我正在使用带有VS Code Seed Seed.cs的Asp Net Core 2.2
namespace Sample.Infra.Data.Seed
{
public class Seed
{
private readonly DataContext _context;
private readonly IHostingEnvironment hostingEnvironment;
private readonly UserManager<Usuario> _userManager;
public Seed(DataContext context, IHostingEnvironment hostingEnvironment)
{
_context = context;
hostingEnvironment = hostingEnvironment;
// _userManager = userManager;
}
public void SeedData()
{
try
{
// if (!_userManager.Users.Any())
// {
var userData = File.ReadAllText($"json/UserSeedData.json");
var users = JsonConvert.DeserializeObject<List<Usuario>>(userData);
AddNewType(users);
// }
_context.SaveChanges();
}
catch (Exception ex)
{
Console.WriteLine($"erro: {ex.Message}");
}
}
}
}
但我得到错误:
找不到路径的一部分 'd: APP 项目 CSHARP ASP 核心 Sample.UI.MVC JSON UserSeedData.json'。
代码Seed.cs:
查看文件夹Json:
这不是JSON问题,它不是C#问题,它不是.Net Core 2x问题。
问题很简单:
问:如果您尝试从相对路径读取文件,例如File.ReadAllText($"json/UserSeedData.json");
,那么.exe会在哪里看?
答:它将尝试在目录“json”中查找文本文件“UserSeedData.json”,无论你的.exe运行在哪里。
建议:
在项目的appsettings.json中定义“JSONDIR”变量设置,然后在调用File.ReadAllText()
时将该路径附加到文件名。
例:
https://www.c-sharpcorner.com/article/setting-and-reading-values-from-app-settings-json-in-net-core/
也可以看看:
Sharing appsettings.json configuration files between projects in ASP.NET Core
正在运行的项目(你有Startup.cs
的地方)Sample.UI.MVC和那个文件应该在那个目录中。但是我认为你可以把项目的完整路径放在它应该工作。
尝试找到一种方法来获取项目的完整路径,并在Sample.Infra.Data
中传递File.ReadAllText(...)
目录路径。
以上是关于在另一个项目中读取JSON文件时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中读取 Twitter json 文件时出现 KeyErrors
使用 pd.read_json 读取 JSON 文件时出现 ValueError 错误
在 PyCharm 中导入 .json 文件时出现问题 [重复]
当 FragmentActivity 在 Android 中进入后台时出现 NotSerializableException