C#File.ReadAllText()不返回当前文件内容

C#File.ReadAllText()不返回当前文件内容,c#,json,file,C#,Json,File,从文件系统读取json配置文件时遇到问题。我正在将对象序列化为文件,如下所示: string json = JsonConvert.SerializeObject(Settings.Instance); Directory.CreateDirectory(configFileDir); File.WriteAllText(configFileDir + configFilePath, json); { "DisplayLanguage": "en-US", "token": "eyJ0eXAi

从文件系统读取json配置文件时遇到问题。我正在将对象序列化为文件,如下所示:

string json = JsonConvert.SerializeObject(Settings.Instance);
Directory.CreateDirectory(configFileDir);
File.WriteAllText(configFileDir + configFilePath, json);
{
"DisplayLanguage": "en-US",
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjM4OWZmMTIxZWU1MmI1ZDk3NWEzY2E0NzYwN2JiZTIzODc1ZjViMDUxNzY1ZDE1MGExZDgyNTM0ODUyMjE4MTcxOGQ0ZTA2NTZlM2JhYzg5In0.eyJhdWQiOiJmNWIwYjcwMS01ODEzLTQ5OGMtYmE1NS1kMWZhOGM5YzQxMGUiLCJqdGkiOiIzODlmZjEyMWVlNTJiNWQ5NzVhM2NhNDc2MDdiYmUyMzg3NWY1YjA1MTc2NWQxNTBhMWQ4MjUzNDg1MjIxODE3MThkNGUwNjU2ZTNiYWM4OSIsImlhdCI6MTUzNzI4NDA0MCwibmJmIjoxNTM3Mjg0MDQwLCJleHAiOjE1Njg4MjAwNDAsInN1YiI6ImE1MTk2OTNjLTAzMGMtNDdjMi04MGI5LTZiNTc5YmQ3MzZlNSIsInNjb3BlcyI6W119.yjzApeU54uXch-3V-x82V-mXfmyr-HG0LsxQMG74nrJP_dBmSi8MuB5mD3Zc07qRnmKnyep7YGYVdhvmukALIY4u5lXrVGXFx_U_EWMyEKce9BxMrM9qbqy-oZ5hfJ9rogUsKeQakkpnD4yciTqn0h8sg-uo6H0-pcWIubhWA9OYmU5-vAIhVRJrQBggW305auCiyKVYcoRQowf12RJhrudn8F_eOhEbrV4A9PZVHTIIVRRFFTCfcHNYDsW9cS1RJ07sOE_rg8-yjQt74gmClgZguYngjQiukCsJtzMBRywRUT24DPGauPsAyYHWzitfe-KaGBbUSLFr2YOK3cDhZI7POv6QaFH-iIcw2-2iTR_h2_rk_iVYQNsyv0lU9KglrsUjiAonqESyHvAyYcSVDaqRobDdG9iXSpKw4jDSL7vkt7_IkMQ1cCftvqueglDNosygR6zbmi4L7ESW5eia8n_6-q6tkSaPageupXXmEBMBZNQF_p8HQf9J8ma7hxc-bcPGFkHFFBhrWlTJg62fT9AR9wIq7zueYpamxkGgfZnXF9QMzEjXNobs3paF9pouTv7H6v1iHJ_90WpGe3NVnJTHxPWVImtb9npvfPgWcYE8Trz6xoTbE81Al5fLjrAK7antgS0DkYkzMp1rxSUQxw_qwTLywuFJJLcwhY5mY2s",
"GUID": "993bc5f2-0b2b-48da-8fc7-94a7b96dc322",
"sortedByRating": true,
"lists": ""
}
public class Settings
{
    private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    private static readonly string configFileDir = Path.Combine(Environment.ExpandEnvironmentVariables("%userprofile%"), "Documents") + @"\MyApp";
    private static readonly string configFilePath = @"\config.json";

    private static Settings _instance;

    public static Settings Instance
    {
        get { return _instance ?? (_instance = new Settings()); }
        private set { _instance = value; }
    }

    [JsonIgnore]
    public static readonly string AddInVersion = "1.4.0.3";

    [JsonProperty("DisplayLanguage")]
    public static string DisplayLanguage { get; set; } = "";

    [JsonProperty("token")]
    public static string AuthToken { get; set; } = "";

    [JsonProperty("GUID")]
    public static string GUID { get; set; } = "";

    [JsonProperty("sortedByRating")]
    public static bool RecommendationsSortedByRating { get; set; } = true;

    [JsonProperty("DistLists")]
    public static string DistLists { get; set; } = "";

    public static void Load()
    {
        try
        {
            log.Info("trying to read config file: " + configFileDir + configFilePath);

            string json = File.ReadAllText(configFileDir + configFilePath);
            log.Info("read: " + json);

            Instance = JsonConvert.DeserializeObject<Settings>(json);
            log.Info("Config file loaded!");
            log.Debug(JsonConvert.SerializeObject(Instance, Formatting.Indented));

        }
        catch (Exception)
        {
            log.Info("Config file not found or could not be loaded. Using Default Settings");
        }
    }

    public static void Save(string settingToSave = "")
    {
        try
        {
            string json = JsonConvert.SerializeObject(Settings.Instance, Formatting.Indented);
            Directory.CreateDirectory(configFileDir);
            File.WriteAllText(configFileDir + configFilePath, json);
            log.Info("Config file successfully saved! (" + settingToSave + ")");
        }
        catch (Exception)
        {
            log.Error("Config file could not be saved!");
        }
    }
完整路径是

C:\Users\username\Documents\MyApp\config.json
现在我可以用以下几行字来读:

string json = File.ReadAllText(configFileDir + configFilePath);                
Instance = JsonConvert.DeserializeObject<Settings>(json);
只有token和GUID似乎丢失了它的值,DisplayLanguage和其他的加载很好。 我用log4net打印json,这不是问题所在。 我通过以下方式获取文件路径:

private static readonly string configFileDir = Path.Combine(Environment.ExpandEnvironmentVariables("%userprofile%"), "Documents") + @"\MyApp";
private static readonly string configFilePath = @"\config.json";
设置类如下所示:

string json = JsonConvert.SerializeObject(Settings.Instance);
Directory.CreateDirectory(configFileDir);
File.WriteAllText(configFileDir + configFilePath, json);
{
"DisplayLanguage": "en-US",
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjM4OWZmMTIxZWU1MmI1ZDk3NWEzY2E0NzYwN2JiZTIzODc1ZjViMDUxNzY1ZDE1MGExZDgyNTM0ODUyMjE4MTcxOGQ0ZTA2NTZlM2JhYzg5In0.eyJhdWQiOiJmNWIwYjcwMS01ODEzLTQ5OGMtYmE1NS1kMWZhOGM5YzQxMGUiLCJqdGkiOiIzODlmZjEyMWVlNTJiNWQ5NzVhM2NhNDc2MDdiYmUyMzg3NWY1YjA1MTc2NWQxNTBhMWQ4MjUzNDg1MjIxODE3MThkNGUwNjU2ZTNiYWM4OSIsImlhdCI6MTUzNzI4NDA0MCwibmJmIjoxNTM3Mjg0MDQwLCJleHAiOjE1Njg4MjAwNDAsInN1YiI6ImE1MTk2OTNjLTAzMGMtNDdjMi04MGI5LTZiNTc5YmQ3MzZlNSIsInNjb3BlcyI6W119.yjzApeU54uXch-3V-x82V-mXfmyr-HG0LsxQMG74nrJP_dBmSi8MuB5mD3Zc07qRnmKnyep7YGYVdhvmukALIY4u5lXrVGXFx_U_EWMyEKce9BxMrM9qbqy-oZ5hfJ9rogUsKeQakkpnD4yciTqn0h8sg-uo6H0-pcWIubhWA9OYmU5-vAIhVRJrQBggW305auCiyKVYcoRQowf12RJhrudn8F_eOhEbrV4A9PZVHTIIVRRFFTCfcHNYDsW9cS1RJ07sOE_rg8-yjQt74gmClgZguYngjQiukCsJtzMBRywRUT24DPGauPsAyYHWzitfe-KaGBbUSLFr2YOK3cDhZI7POv6QaFH-iIcw2-2iTR_h2_rk_iVYQNsyv0lU9KglrsUjiAonqESyHvAyYcSVDaqRobDdG9iXSpKw4jDSL7vkt7_IkMQ1cCftvqueglDNosygR6zbmi4L7ESW5eia8n_6-q6tkSaPageupXXmEBMBZNQF_p8HQf9J8ma7hxc-bcPGFkHFFBhrWlTJg62fT9AR9wIq7zueYpamxkGgfZnXF9QMzEjXNobs3paF9pouTv7H6v1iHJ_90WpGe3NVnJTHxPWVImtb9npvfPgWcYE8Trz6xoTbE81Al5fLjrAK7antgS0DkYkzMp1rxSUQxw_qwTLywuFJJLcwhY5mY2s",
"GUID": "993bc5f2-0b2b-48da-8fc7-94a7b96dc322",
"sortedByRating": true,
"lists": ""
}
public class Settings
{
    private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    private static readonly string configFileDir = Path.Combine(Environment.ExpandEnvironmentVariables("%userprofile%"), "Documents") + @"\MyApp";
    private static readonly string configFilePath = @"\config.json";

    private static Settings _instance;

    public static Settings Instance
    {
        get { return _instance ?? (_instance = new Settings()); }
        private set { _instance = value; }
    }

    [JsonIgnore]
    public static readonly string AddInVersion = "1.4.0.3";

    [JsonProperty("DisplayLanguage")]
    public static string DisplayLanguage { get; set; } = "";

    [JsonProperty("token")]
    public static string AuthToken { get; set; } = "";

    [JsonProperty("GUID")]
    public static string GUID { get; set; } = "";

    [JsonProperty("sortedByRating")]
    public static bool RecommendationsSortedByRating { get; set; } = true;

    [JsonProperty("DistLists")]
    public static string DistLists { get; set; } = "";

    public static void Load()
    {
        try
        {
            log.Info("trying to read config file: " + configFileDir + configFilePath);

            string json = File.ReadAllText(configFileDir + configFilePath);
            log.Info("read: " + json);

            Instance = JsonConvert.DeserializeObject<Settings>(json);
            log.Info("Config file loaded!");
            log.Debug(JsonConvert.SerializeObject(Instance, Formatting.Indented));

        }
        catch (Exception)
        {
            log.Info("Config file not found or could not be loaded. Using Default Settings");
        }
    }

    public static void Save(string settingToSave = "")
    {
        try
        {
            string json = JsonConvert.SerializeObject(Settings.Instance, Formatting.Indented);
            Directory.CreateDirectory(configFileDir);
            File.WriteAllText(configFileDir + configFilePath, json);
            log.Info("Config file successfully saved! (" + settingToSave + ")");
        }
        catch (Exception)
        {
            log.Error("Config file could not be saved!");
        }
    }
公共类设置
{
私有静态只读ILog log=LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
私有静态只读字符串configFileDir=Path.Combine(环境.ExpandEnvironmentVariables(“%userprofile%”),“Documents”)+@“\MyApp”;
私有静态只读字符串configFilePath=@“\config.json”;
私有静态设置\u实例;
公共静态设置实例
{
获取{return _instance???(_instance=new Settings());}
私有集{u instance=value;}
}
[JsonIgnore]
公共静态只读字符串AddInVersion=“1.4.0.3”;
[JsonProperty(“显示语言”)]
公共静态字符串DisplayLanguage{get;set;}=”“;
[JsonProperty(“令牌”)]
公共静态字符串AuthToken{get;set;}=”“;
[JsonProperty(“GUID”)]
公共静态字符串GUID{get;set;}=”“;
[JsonProperty(“sortedByRating”)]
public static bool RecommendationsSortedByRating{get;set;}=true;
[JsonProperty(“distList”)]
公共静态字符串distlist{get;set;}=”“;
公共静空荷载()
{
尝试
{
log.Info(“尝试读取配置文件:”+configFileDir+configFilePath);
字符串json=File.ReadAllText(configFileDir+configFilePath);
log.Info(“读取:“+json”);
Instance=JsonConvert.DeserializeObject(json);
log.Info(“已加载配置文件!”);
Debug(JsonConvert.SerializeObject(实例,格式化,缩进));
}
捕获(例外)
{
log.Info(“未找到或无法加载配置文件。使用默认设置”);
}
}
公共静态void Save(字符串设置为Save=“”)
{
尝试
{
字符串json=JsonConvert.SerializeObject(Settings.Instance,Formatting.Indented);
CreateDirectory(configFileDir);
WriteAllText(configFileDir+configFilePath,json);
log.Info(“配置文件已成功保存!(“+settingToSave+”);
}
捕获(例外)
{
log.Error(“无法保存配置文件!”);
}
}

这不是路径问题,您对文件的阅读非常好。 检查设置类

public class Settings{
public string DisplayLanguage{ get; set; }
public string token{ get; set; }

 }
如果您遗漏了其中任何一项,则可能会产生问题。请同时检查格式。
Log4NET可能不会显示长字符串。请在类中检查令牌的大写句子情况。

这些新字符串值有多长?考虑使用<代码>路径。结合生成文件的完整路径,而不是连接字符串String。你的设置类看起来是什么样的?重要的是知道什么“代码>设置< /Cord>Loo”。像这样,把所有的东西都包含在一个类中是很奇怪的,更奇怪的是你的属性都是静态的POCO:一个表示数据的普通类,没有任何功能,并确保您的属性是实例属性。如果您希望单例和序列化/反序列化在其他类中实现,请将您的关注点分开