2012-04-26 13 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型の文字列などの単純なプロパティを設定することができます。

しかし、List型のプロパティ 'Views'にList型のプロパティを設定する方法はありません。

でも、私はそのプロパティのタイプを見つけることができません。

単に実行時にプロパティを初期化したいと思います。その後、

Views = new List<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にシリアル化することをお勧めします。

オブジェクトのXML表現を微調整するために使用できるフレームワークによって提供されるattributesのセットがあります。

関連する問題