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 string 等。

但是我没有找到一种方法来填充 List 类型的示例属性“Views”中的 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;
        }

任何想法都会很棒,因为我已经尝试过,但到目前为止还没有找到解决方案。

4

1 回答 1

2

这看起来是一个很好的 XML 序列化/反序列化候选者。.NET 有一组内置类,允许您将对象持久化(序列化)到 XML,并从 XML 创建对象的实例(反序列化)。

我建议您在 MSDN 上阅读此内容,并首先将您的类的实例序列化为 XML 作为学习练习。

框架提供了一组属性,您可以使用它们来微调对象的 XML 表示。

于 2012-04-26T07:48:17.943 回答