[英]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.