2009-04-01 2 views
0

У меня есть XML-файл, который я обрабатываю с помощью LINQ. Я хочу в основном сериализовать XML-данные в пользовательские объекты, но не знаю, как это сделать.Сгенерировать сложный объект из LINQ to XML в VB .NET

упрощенного XML

<Data> 
    <Group id="1"> 
     <Child id="1"/> 
     <Child id="2"/> 
     <Child id="3"/> 
    </Group> 
    <Group id="2"> 
     <Child id="1"/> 
     <Child id="2"/> 
     <Child id="3"/> 
    </Group> 
</Data> 

У меня есть класс с именем группы по свойству детям, что является списком (ребенок).

я могу сделать следующее в LINQ для создания Enurable (из группы):

dim g = From item In _ 
XElement.Load("XMLFile.xml", LoadOptions.None)...<Group> _ 
Select New nABLE4ConfigInfo.Group([email protected]) 

Как я могу закончить выше LINQ запроса для заполнения свойства Детей объекта группы?

ответ

1

Это так же просто, как вложенные операторы select и правый конструктор класса.

Dim g = From item In _ 
     XElement.Load("XMLFile.xml", LoadOptions.None)...<Group> _ 
      Select New Group(id:[email protected], _ 
        Children:=(From c In item...<Child> Select [email protected]).ToList) 
2

Я думаю, что этот класс, в паре с System.Xml.Serialization.XmlSerializer, будет делать трюк:

<Serializable> _ 
Public Class Data 

    <Serializable> _ 
    Public Class Group 

     <Serializable> _ 
     Public Class Child 
      <XmlAttribute> _ 
      Public id As Integer 
     End Class 


     <XmlArray> _ 
     Public Child() As Child 

     <XmlAttribute> _ 
     Public id As Integer 

    End Class 

    <XmlArray> _ 
    Public Group() As Group 
End Class 

Класс может понадобиться работа еще: получение массивов право может быть сложнее.

+0

Я боялся этого ответа. Представленный мной XML значительно упрощен. Я использую сериализацию XML во всем этом приложении, но не могу этого сделать. – jercra

+0

Ну, это не единственный способ: существует не менее 1/2 десятка различных способов обработки xml в .Net. Вы используете XDocument, и я показал вам сериализацию, но есть также XmlDocument или DataSet.ReadXml(), чтобы назвать пару. Вы можете читать вручную, если вам нужно. –

+0

Я понимаю. Извините, если я не понял. У меня уже есть метод, который обрабатывает это с помощью XML DOM и работает отлично. Я просто хотел использовать решение с помощью LINQ, поскольку он намного чище. – jercra

Смежные вопросы