Сериализация списка объектов
Есть объект класса ExcelStylesheet, который подлежит сериализации в JSON.
public class ExcelStylesheet
{
public Dictionary<int, uint> CellFormatIndexes { get; set; }
public List<Font> Fonts { get; set; }
public List<CellFormat> CellFormats { get; set; }
public List<Fill> Fills { get; set; }
public List<Border> Borders { get; set; }
}
Пытаюсь сериализовать в файл.
string json = JsonConvert.SerializeObject(stylesheet);
File.WriteAllText(filePath, json);
На выходе получаю:
{"CellFormatIndexes": {"0": 9,"1": 10},"Fonts": [[[],[]],[[],[],[]]],"CellFormats": [[[]],[[]]],"Fills": [[]],"Borders": [[]]}
Почему списки объектов сериализуются таким образом и как сделать нормальную сериализацию?
Используемая библиотека: Newtonsoft.Json. Списки из объектов классов библиотеки DocumentFormat.OpenXml
Ответы (1 шт):
Потому что все эти классы наследуют от OpenXmlElement, который является коллекцией дочерних элементов. Newtonsoft.Json все такие классы сохраняет как массивы.
Если вам нужно записать объект в файл для последующего чтения - лучше преобразуйте эти объекты в строку через OuterXml при записи, а при чтении преобразуйте обратно через принимающий строку конструктор.
Можете попытаться написать свой JsonConverter для наследников OpenXmlElement.