簡體   English   中英

如何序列化和反序列化包含分隔符的嵌套xml

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM