[英]how to serialize and deserialize nested xml containing seperators
我处于字符串中具有这样的xml的情况下:
string xmlString =
<parameters>
<parameter>
<name>name1</name>
<label>Max1</label>
<unit>Millions1</unit>
<component>
<type>Combo</type>
<attributes>
<type>Integer1</type>
<displayed>41</displayed>
<selected>01</selected>
<items>
<item>51</item>
<item>11</item>
<item>21</item>
<item>51</item>
</items>
</attributes>
</component>
</parameter>
<separator>Auto Skewing</separator>
<parameter>
<name>name2</name>
<label>Max2</label>
<unit>Millions2</unit>
<component>
<type>Combo</type>
<attributes>
<type>Integer2</type>
<displayed>42</displayed>
<selected>02</selected>
<items>
<item>5</item>
<item>12</item>
<item>22</item>
<item>52</item>
</items>
</attributes>
</component>
</parameter>
</parameters>
在这里,我必须使用组合弓来呈现GUI(UIElements),如下所示:
首先,如何对这个xml进行序列化,我只需要自己在Parameters类中需要帮助即可? 通过这样做,我可以很容易地反序列化它:
XmlSerializer deserializer = new XmlSerializer(typeof(Parameters));
XmlReader reader = XmlReader.Create(new StringReader(xmlstring));
Parameters parameters = (Parameters)deserializer.Deserialize(reader);
但是问题是在此步骤之后,我必须使用IValueConverter()的Converter()来渲染GUI,如下所示:
ComboBox cb = new ComboBox();
TextBox txtblk2 = new TextBox();
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
ICollection<Parameter> list = value as ICollection<Parameter>;
List<UIElement> result = new List<UIElement>();
if (list != null)
{
foreach (Parameter p in list)
{
if (p.Component.Type == "Combo")
{
StackPanel st = new StackPanel()
{
Orientation = Orientation.Horizontal
};
var txtblk = new TextBox();
txtblk.Text = p.Label;
foreach (var item in p.Component.Attributes.Items)
{
cb.Items.Add(item); //These item contains a l0,15,45,60 to select through combo box
}
cb.SelectionChanged += new SelectionChangedEventHandler(comboBox1_SelectionChanged);
cb.SelectedIndex = cb.Items.Count - 1;
txtblk2.Text = cb.SelectedValue.ToString() +" millions";
st.Children.Add(txtblk);
st.Children.Add(cb);
txtblk2.FontSize = 18;
st.Children.Add(txtblk2);
result.Add(st);
}
}
}
return(result);
}
现在的问题是如何绘制此分隔线(在我的xml中为Auto Skewing),它将分隔与两个不同的GUI对应的两个独立的GUI的呈现(xml中存在两个不同的“参数”,请查看快照以了解更多信息) ?
XmlSerializer
并不真正希望像这样的交错数据,即使成功将数据序列化为对象模型,您也将无法区分分隔符的去向。 最好的选择是将其加载到DOM( XmlElement
/ XElement
)中并仅在元素上循环,或者使用诸如xslt之类的转换工具(尽管如今这不是很流行)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.