Здравствуйте. Мне интересно как лучше в XML'ку сохранять различные данные. Вот есть, например, массив структур: Код (Text): struct A { int x; int y; }; A arr[2]; мне интересно как лучше этот массив представить в XML'ке? Первое что приходит в голову - давать элементам массива нумерованные имена, типа: Код (Text): <arr size="2"> <v0 x="1" y="2"/> <v1 x="3" y="4"/> </arr> Второе - заюзать неймспейсы. Код (Text): <arr size="2"> <v xmlns="1" x="1" y="2"/> <v xmlns="2" x="3" y="4"/> </arr> Какие ещё есть варианты?
Можно ещё так: Код (Text): <arr size="2"> <A> <x>1</x> <y>2</y> </A> <A> <x>3</x> <y>4</y> </A> </arr> Или даже не указывать явно размер <arr size="2">, а определять его в процессе парсинга
Хотя было бы не плохо посмотреть как сериализует различные типы C# и сделать по аналогии. Жаль только, он у меня не установлен. Гляньте, плиз, у кого он есть - как массивы и структуры (или классы) сохраняются?
А еще можно посмотреть на boost::archive, возможно ничего и писать не придется, там есть как раз xml archive: // a portable XML archive boost::archive::xml_oarchive // saving boost::archive::xml_iarchive // loading // a portable XML archive which uses wide characters - use for utf-8 output boost::archive::xml_woarchive // saving boost::archive::xml_wiarchive // loading
Очень просто, предаёте объект серилезатору и всё. ^) З.Ы. С С++ вы такого не достигните, .Net это более высокая ступень развития.
Передавать нативный объект в функцию, которая сериализует managed объекты? -- Бред. Booster Ну вот я же говорю, юзайте boost:archive конечно совсем без усилий не получится одной операцией сериализовывать, но учитывая, что все уже в библиотеке есть для сериализации стандартных типов и контейнеров, усилий нужно приложить ну просто минимум, вообще почти ничего не нужно делать =) Зачем изобретать велосипед?