sathish kumbanad Ответов: 1

Сериализация и десериализация неизвестного XML


У меня есть xml с большими данными.Я знаю почти 90% своего xml-контента, но оставшиеся 10% мне нужно сериализовать и десериализовать динамически.Я знаю тип этой части.
Пример xml
-----------
< версия автомобиля= "2.0">
& lt;двигатели>
< название двигателя= "Turbo"/>
< название двигателя= "Каппа"/>

< автомобили>
< название автомобиля= " XX "Двигатель =" Turbo "тип=" Premium " >
< особенности>
& lt;особенность>
< attributename> TestAttribute
< type> Test1
< valuetype> TestFeature
< значение>
< x> 100
< y> 200
< z> 200
< d> 400




< название автомобиля=" YY "двигатель = "Kappa">
< особенности>
& lt;особенность>
< attributename> TestAttribute
< type> Test1
< valuetype> TestFeature
< значение>
ХХХХХ



& lt;особенность>
< attributename> TestAttribute
< тип> YYY
< valuetype> TestXyz
< значение>
< имя & gt;gdg
< возраст> drfd








Здесь значения внутри тега & lt;value> будут динамическими ,и я изначально не знаю содержимого, но знаю тип этого объекта.
Пожалуйста, кто-нибудь поможет решить эту проблему.

Что я уже пробовал:

У меня есть классы данных для этих 90% этого xml.

1 Ответов

Рейтинг:
1

lw@zi

Рассматривали ли вы возможность использования Dictionary для хранения этих значений? Вот как вы можете построить его из XML.

Этот код возьмет на себя все values теги и хранят все его потомки в виде словаря.

string xml = @"<start>
                <valuetype>testFeature1</valuetype>
                <values><a>1</a>2</values>
                <valuetype>testFeature2</valuetype>
                <values><x>10</x><y>20</y></values>
               </start>";

XDocument xDocument = XDocument.Parse(xml);
Dictionary<string,string> dynamicThings = xDocument.Root.Elements()
                                           .Where(x=> x.Name == "values")
                                           .Descendants()
                                           .Select(x => new { Key = x.Name, Value = x.Value })
                                           .ToDictionary(x => x.Key.ToString(), x => x.Value);


sathish kumbanad

Спасибо lw@zi за Ваш быстрый ответ.Я попробую это сделать и дам вам знать, решит ли это мою проблему или нет.