Есть класс в котором одно из свойств это объект из библиотеки dll. Суть в том, что при вызове метода JsonConvert.DeserializeObject вызывается исключение "Unable to find a default constructor to use for type xNet.CookieDictionary. Path 'cookies.remixlang', line 1, position 39." Как мне спарсить строку в объект? Код, который используется:
class Globals
{
public static Globals info = new Globals();
public bool isAuth = false;
public CookieDictionary cookies = null;//из xNet.dll
}
Сначала сохраняю в файл:
File.WriteAllText(save_file, JsonConvert.SerializeObject(Globals.info));
Пытаюсь спарсить:
Globals.info = JsonConvert.DeserializeObject<Globals>(File.ReadAllText(save_file));//Исключение тут
Собственно что мне делать как мне быть?
На сколько я понимаю, вы для работы с JSON используете библиотеку Newtonsoft.Json (JSON.NET). Для десериализации ей во многих случаях необходимо, чтобы десериализуемые типы имели конструктор без параметров. У класса xNet.CookieDictionary его, очевидно нету, поэтому выбрасывается данное исключение.
Если данный класс не является sealed-классом и имеет public или protected конструктор, вы можете его унаследовать, и создать открытый конструктор по-умолчанию без параметров:
class MyCookieDictionary : CookieDictionary
{
// Здесь, возможно, потребуется передать некоторые параметры по-умолчанию
public MyCookieDictionary() : base() { }
}
class Globals
{
...
public MyCookieDictionary cookies = null;
}
Другой вариант заключается в том, чтобы для хранения сериализуемых данных использовать только простые структуры и стандартные типы, вроде System.Collections.Generic.Dictionary вместо xNet.CookieDictionary, с которыми JSON.NET гарантированно умеет работать, а перед сериализацией и после десериализации так или иначе преобразовать данные к необходимым типам.
Продвижение своими сайтами как стратегия роста и независимости