UnauthorizedAccessException-尝试将JSON序列化为文件

时间:2018-11-20 21:43:44

标签: c# .net parsing

我试图在解析后生成JSON文件。

在下面的代码中,我选择了将显示指定JSON文件的路径。

public class Movie 
{
    public string Name { get; set; }
    public int Year { get; set; }
}

class Parsing
{
    static void Main(string[] args)
    {
        //Just a movie object for the sake of testing
        Movie movie = new Movie
        {
            Name = "Bad Boys",
            Year = 1995
        };

        try
        {
            // serialize JSON to a string and then write string to a file
            File.WriteAllText(@"c:\\Users\\LOrdBenche\\source\\repos\\parsingTest\\parsingTest\\producedJSON", JsonConvert.SerializeObject(movie));

            // serialize JSON directly to a file
            using (StreamWriter file = File.CreateText(@"c:\\Users\\LOrdBenche\\source\\repos\\parsingTest\\parsingTest\\producedJSON"))
            {
                JsonSerializer serializer = new JsonSerializer();
                serializer.Serialize(file, movie);
            }
        }
        catch (UnauthorizedAccessException e)
        {
            Console.WriteLine(e.ToString());
        }
    }
}

但是,问题是我一直在使用UnauthorizedAccessException。我已经获得了对该文件夹的访问权限,并且还尝试了以管理员身份运行该程序。

我在网上发现的所有内容都建议使用这两种方法,但是它们没有用。

2 个答案:

答案 0 :(得分:0)

您都在使用verbatim string literal@"")并转义了路径的反斜杠。字符串文字前的@将导致它忽略转义的反斜杠。因此,它实际上是在尝试写入c:\\Users\\LOrdBenche\\source\\repos\\parsingTest\\parsingTest\\producedJSON,这在Windows中是无效路径。

最重要的是,您仅在路径中提供一个文件夹。 File.WriteAllText()File.CreateText()也需要文件名和文件扩展名。

此外,您可能应该将路径移至const变量:

const string path = @"c:\Users\LOrdBenche\source\repos\parsingTest\parsingTest\producedJSON\test.json";

// ...

File.WriteAllText(path, JsonConvert.SerializeObject(movie));

// ...

using (StreamWriter file = File.CreateText(path))

// ...

答案 1 :(得分:0)

我相信您的代码应该可以工作。 您可以尝试打开命令提示符并键入

dir > test.txt

然后

pip3 install opencv-python 
sudo apt-get install libcblas-dev
sudo apt-get install libhdf5-dev
sudo apt-get install libhdf5-serial-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libjasper-dev 
sudo apt-get install libqtgui4 
sudo apt-get install libqt4-test

如果收到“访问被拒绝”消息,那是因为您确实没有足够的权限写入该文件夹。