读取json文件异常“未处理的异常:System.TypeInitializationException:类型初始化程序”

时间:2018-12-10 20:59:48

标签: c# json visual-studio

我正在尝试学习如何编写Discord机器人,并且需要读取一个JSON文件。

这是我的实用程序课程

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.IO;

namespace mah_discord_bot
{
    class Utilities
    {

        private static Dictionary<string, string> alerts;

        static Utilities()
        {
            string json = File.ReadAllText("SystemLang\alerts.json");
            var data = JsonConvert.DeserializeObject<dynamic>(json);

            alerts = data.ConvertToObject<Dictionary<string, string>>();    
        }

        public static string GetAlert(string key)
        {
            if (alerts.ContainsKey(key))
            {
                return alerts[key];
            }
            else
            {
                return "";
            }
        }
    }
}

这是我的主班,我称之为公用事业课

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace mah_discord_bot
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Utilities.GetAlert("test"));
        }
    }
}

我的JSON文件如下

{
    "test": "Hello"
}

我的文件夹结构看起来像这样,我不确定是不是因为调试此行时它无法读取我创建的JSON文件

string json = File.ReadAllText("SystemLang\alerts.json");

它返回null,所以我不确定我在哪里搞砸。

enter image description here

还有完整的错误日志

Unhandled Exception: System.TypeInitializationException: The type initializer for 'mah_discord_bot.Utilities' threw an exception. ---> System.ArgumentException: Illegal characters in path.
   at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional)
   at System.IO.Path.GetFileName(String path)
   at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost)
   at System.IO.File.InternalReadAllText(String path, Encoding encoding, Boolean checkHost)
   at System.IO.File.ReadAllText(String path)
   at mah_discord_bot.Utilities..cctor() in K:\visual sutdio proj\mah-discord-bot\mah-discord-bot\Utilities.cs:line 18
   --- End of inner exception stack trace ---
   at mah_discord_bot.Utilities.GetAlert(String key)
   at mah_discord_bot.Program.Main(String[] args) in K:\visual sutdio proj\mah-discord-bot\mah-discord-bot\Program.cs:line 13
Press any key to continue . . .

1 个答案:

答案 0 :(得分:3)

  

System.ArgumentException:路径中的非法字符。

\用作C#中的转义字符,而\a不是有效的路径字符。

"SystemLang\alerts.json"

改为使用@"SystemLang\alerts.json""SystemLang\\alerts.json"