我有一个如下所示的课程:
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等简单属性。
但是我找不到如何在我的示例属性'Views'中填充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;
}
任何想法都会很棒,因为我已经尝试但到目前为止还没能找到解决方案。
答案 0 :(得分:2)
这看起来像是XML序列化/反序列化的一个很好的候选者。 .NET有一组built in classes,允许您将对象(序列化)持久化为XML,并从XML创建对象实例(反序列化)。
我建议您在MSDN上阅读此内容,然后将您的类实例序列化为XML作为学习练习。
框架提供了一组attributes,您可以使用它来微调对象的XML表示。