0

以下のようなクラスがあります。

 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 文字列などの単純なプロパティを設定できます。

しかし、リスト型のプロパティ「ビュー」の例で、リスト型のプロパティを設定する方法が見つかりません。

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

実行時にプロパティを初期化したいだけです。

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;
        }

私が試したので、これまでのところ解決策を見つけることができなかったので、どんなアイデアでも素晴らしいでしょう。

4

1 に答える 1

2

これは、XML シリアライゼーション/デシリアライゼーションの有力な候補のようです。.NET には、オブジェクトを XML に永続化 (シリアル化) したり、XML からオブジェクトのインスタンスを作成 (逆シリアル化) したりできる組み込みクラスのセットがあります。

MSDN でこれを読んで、学習課題としてクラスのインスタンスを XML にシリアル化することから始めることをお勧めします。

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

于 2012-04-26T07:48:17.943 に答える