Комментарии 15
Вы перепутали habr и govnokod.ru.
Обоснуйте. Вы имеете полное право считать, что этой статье здесь не место, но код делает в точности то, что я от него хочу.
if (true.ToString().ToLower() == "true") {...} тоже делает, то, что автор хочет. Вопрос - "зачем"?
Я честно попытался прикинуть, в каком случае может понадобится ваш костыль - но ничего так и не придумалось. Можете дать пример, когда ваш костыль даёт хоть какую-то пользу перед другими сериализациями?
Ну для key\value существует Dictionary, который сереализуется в JSON и XML без всяких костылей, а если нужны Subitems, то легко положить в словарь и IEnumerable. Костыли они и на то костыли, что ими не хвастаются.
Как минимум, Dictionary не сохраняет порядок добавления.
OrderedDictionary
Да.
А как насчет вложенности?
Можно спокойно добавить любую коллекцию в словарь.
OrderedDictionary<Key, object?>
Но как уже выше сказали - нужны все вводные.
Вообще-то, я всегда сериализовал в XML вручную, и когда сейчас глянул в документацию, понял, что не представляю возможностей штатной сериализации стандартных контейнеров.
Могли бы вы представить этот пример через Dictionary, и каков будет результат сериализации в XML?
IEnumerable GetTypeInfo(Type type) { return new NVItem[] { new NVItem("Name", type.Name), new NVItem("FullName", type.FullName), new NVItem("CustomAttributes", type.CustomAttributes), };}
Опять не с того конца.
Какой результат хочется получить?
Нужно конкретный набор объектов сериализовать в xml без какой-то предопределённой структуры, чтобы потом по этому xml воссоздать исходные объекты?
Или же нужно какую-то предопределённую структуру в xml выразить в коде?
https://learn.microsoft.com/en-us/dotnet/standard/serialization/xml-and-soap-serialization
Стандартными средствами можно обоими путями пойти.
Если хочется просто сериализовать и не важно во что, то все стандартные коллекции вполне поддаются сериализации в XML.
Classes that implement ICollection or IEnumerable.
Если хочется что-то конкретное, то гибче всего - руками построить XmlDocument с нужной структурой.
Справедливо и в обратную сторону.
Да. Сериализовать вручную - через XmlDocument.
По штатной сериализацией я имел в ввиду что-то вроде:
var serializer = new XmlSerializer(typeof(NVItem));
но это требует слишком много усилий, по сравнению с ручным методом.
Кроме того, если требуется сериализовать лишь некоторые поля, нам все равно придется использовать некоторый промежуточный носитель.
Я хорошо представляю, как можно вместо NVItem использовать комбинацию Dictionary и List, и затем сериализовать это через XmlDocument.
Мой вопрос в том - можно ли такую комбинацию сходу подставить в XmlSerilizer?
Сериализовать вручную настолько проще, что нет смысла пытаться написать такое с нуля, но если у вас уже есть работающий код, было бы любопытно его увидеть.
Актуальная статья про Tree всё же эта: https://habr.com/ru/articles/503240/

Plain text serialization