在另一个项目中读取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:

Code Seed.cs

查看文件夹Json:

View Folder 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 错误

从 MVC .Net 核心控制器读取 JSON 时出现问题

从套接字读取数据时出现问题

在 PyCharm 中导入 .json 文件时出现问题 [重复]

当 FragmentActivity 在 Android 中进入后台时出现 NotSerializableException