繁体   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