C # File.ReadAllText () не возвращает текущее содержимое файла - PullRequest
0 голосов
/ 18 сентября 2018

У меня проблемы с чтением файла конфигурации json из моей файловой системы.Я сериализую объект в файл следующим образом:

string json = JsonConvert.SerializeObject(Settings.Instance);
Directory.CreateDirectory(configFileDir);
File.WriteAllText(configFileDir + configFilePath, json);

Полный путь:

C:\Users\username\Documents\MyApp\config.json

Теперь я могу прочитать его со следующими строками:

string json = File.ReadAllText(configFileDir + configFilePath);                
Instance = JsonConvert.DeserializeObject<Settings>(json);

Моя проблема заключается в том, что после того, как я собрал новую версию программы, он не сможет правильно прочитать некоторые свойства.Когда я просто перезагружаюсь, все настройки загружаются нормально, но когда я перестраиваюсь, файл не загружает более длинные строковые значения (токены).

Печать строки json показывает пустые строковые значения для некоторых ключей, которыеявно иметь значения при открытии файла в блокноте.

У кого-нибудь есть догадки?

Привет, Maik

РЕДАКТИРОВАТЬ:

JSON выглядит такthis:

{
"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": ""
}

Только токен и GUID, похоже, теряют свои значения, DisplayLanguage и другие загружаются просто отлично.Я печатаю JSON с log4net, это не проблема.Я получаю путь к файлу с:

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

Класс настроек выглядит следующим образом:

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!");
        }
    }

1 Ответ

0 голосов
/ 18 сентября 2018

Это не проблема пути, вы очень хорошо читаете файл.проверьте настройки класса

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

 }

, если вы пропустите какой-либо из них, это может создать проблему.проверьте форматы также.Log4net может не отображать длинную строку.Попробуйте проверить регистр в верхнем регистре предложения токена в классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...