Десериализация JSON в C#

433
28 августа 2017, 05:37

Есть класс в котором одно из свойств это объект из библиотеки 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));//Исключение тут

Собственно что мне делать как мне быть?

Answer 1

На сколько я понимаю, вы для работы с 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 гарантированно умеет работать, а перед сериализацией и после десериализации так или иначе преобразовать данные к необходимым типам.

READ ALSO
Копирование картинки из тега img

Копирование картинки из тега img

Здравствуйте, есть капча при обновлении страницы появляеться новая

218
Как обойти скрытые папки при переборе файлов?

Как обойти скрытые папки при переборе файлов?

При переборе файлов в папках есть одна проблема, это скрытые файлы (переберает по ним тоже), как можно обойти скрытые папки?

283
Работа с нужной строкой

Работа с нужной строкой

Есть файл с разной информацией, например:

187
Как отправить сообщение по WSS?

Как отправить сообщение по WSS?

Uncaught DOMException: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state

301