2012-04-26 4 views
0

У меня есть класс, который выглядит, как показано ниже:Как заполнить общий список во время выполнения на C#?

public class GUIView 
    { 
     public GUIView() 
     { 
      Views = new List<View>(); 
     } 


     public List<View> Views 
     { 
      get; 
      set; 
     } 

     public ViewMode ViewMode 
     { 
      get; 
      set; 
     } 

     public ViewStatus Status 
     { 
      get; 
      set; 
     } 
} 


public class View 
    {   
     public View() 
     { 
      DisplayFunctions = new List<DisplayFunction>(); 
     }   
     public ChartType ViewType 
     { 
      get; 
      set; 
     }   
     public List<DisplayFunction> DisplayFunctions 
     { 
      get; 
      set; 
     } 
    } 

public class DisplayFunction 
    { 
     public int Id 
     { 
      get;set; 
     } 

     public byte[] Color 
     { 
      get; 
      set; 
     } 

     public FunctionShape Shape 
     { 
      get; 
      set; 
     } 
    } 

У меня есть XML-файл, из которого я заселение объектов во время выполнения. Я могу заполнить простые свойства, такие как int string и т. Д.

Но я не нахожу способ, как заполнить свойство, которое имеет тип List в моем примере, свойство «Просмотры», которое имеет тип List.

Даже я не могу найти тип этого имущества.

Просто я хочу инициализировать свойство во время выполнения, например.

Views = new List<View>(); 

, а затем создать экземпляр View

View v = new View(); 

, а затем заполнить вид объекта и, наконец, добавить его в список

Views.Add(view) 

Вот мой XML-файл:

<?xml version="1.0" encoding="utf-8"?> 
<Views> 
    <GUIView ViewMode="Single" Status="On"> 
    <View ViewType="Lt"> 
     <DisplayFunction Shape="Bar" Id="514" Color="122,222,123,133" /> 
    </View> 
    <View ViewType="Lt"> 
     <DisplayFunction Shape="Bar" Id="122" Color="122,222,123,133" /> 
    </View> 
    </GUIView> 
    <GUIView ViewMode="Dual" Status="On"> 
    <View ViewType="Lt"> 
     <DisplayFunction Shape="Bar" Id="122" Color="122,222,123,133" /> 
    </View> 
    <View ViewType="Lt"> 
     <DisplayFunction Shape="Bar" Id="122" Color="122,222,123,133" /> 
    </View> 
    </GUIView> 
    <GUIView ViewMode="Dual" Status="On"> 
    <View ViewType="Lt"> 
     <DisplayFunction Shape="Bar" Id="122" Color="122,222,123,133" /> 
    </View> 
    <View ViewType="Lt"> 
     <DisplayFunction Shape="Bar" Id="122" Color="122,222,123,133" /> 
    </View> 
    </GUIView> 
    <GUIView ViewMode="Dual" Status="On"> 
    <View ViewType="Lt"> 
     <DisplayFunction Shape="Bar" Id="122" Color="122,222,123,133" /> 
    </View> 
    <View ViewType="Lt"> 
     <DisplayFunction Shape="Bar" Id="122" Color="122,222,123,133" /> 
    </View> 
    </GUIView> 
</Views> 

Я написал способ для заполнения объекта, который работает для простых свойств, но мне нужна помощь в заполнении списка, вот мой метод:

public static XElement FromXml(this XElement xe, object obj) 
     { 
      if (xe != null && xe.HasAttributes) 
      { 
       foreach (XAttribute attribute in xe.Attributes()) 
       { 
        try 
        { 
         PropertyInfo p = obj.GetType().GetProperty(attribute.Name.ToString()); 
         if (p != null && p.CanWrite) 
         { 
          string s = attribute.Value; 
          if (s.Length > 0) 
          { 
           UpdateProperty(p, obj, s); 
          } 
         } 
        } 
        catch (Exception ex) 
        { 
         Log.Error("FromXml", ex); 
        } 
       } 
      } 
      return xe; 
     } 

Любая идея, было бы здорово, как я пытался, но не смог найти решения до сих пор ,

+3

Что вы попробовали? –

+4

@ Praveen: так что здесь не работает? – Tigran

ответ

2

Это похоже на хороший кандидат на сериализацию/десериализацию XML. .NET имеет набор built in classes, который позволяет вам сохранять объект (сериализовать) в XML и также создавать экземпляр объекта (десериализовать) из XML.

Предлагаю вам ознакомиться с этим в MSDN и начать с сериализации экземпляра вашего класса для XML в качестве учебного упражнения.

Существует набор attributes, предоставляемый каркасом, который вы можете использовать для точной настройки XML-представления вашего объекта.

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