C#Tri State TreeView XML序列化 [英] C# Tri State TreeView XML Serialization

查看:88
本文介绍了C#Tri State TreeView XML序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的设计是一个Tri State TreeView,我为此创建了一个要序列化的xml文件。我创建了我的xsd schmea,然后我为该模式生成了我的类(workflow.xml - > workflow.xsd - > workflow.cs)



我想要如果选中Tri State的方框,则解析xml值为1或0



我的代码如下:



(WorkflowModulSplitAnalizaSplit()和WorkflowModulCapturaPrelucrareCaptura()是在workflow.cs中生成的类。)

I have im my design a Tri State TreeView for which I create a xml file to serialize. I create my xsd schmea and then i have generated my class for that schema (workflow.xml -> workflow.xsd -> workflow.cs)

I want to parse in xml values "1" or "0" if a box from Tri State is checked or not

My code looks like that:

( WorkflowModulSplitAnalizaSplit() and WorkflowModulCapturaPrelucrareCaptura() are classes generated in workflow.cs )

private void WriteXMLFileUsingValuesFromNodes(string filenamexml)
      {
            WorkflowModulSplitAnalizaSplit mc_s = new WorkflowModulSplitAnalizaSplit();
            if (triStateTreeView1.GetChecked(triStateTreeView1.Nodes[0].Nodes[0].Nodes[0].Nodes[0]) == TriStateTreeView.CheckState.Checked)
            {
                mc_s.M0_RevertSnapshot = byte.Parse("1");
            }
            else
            {
                mc_s.M0_RevertSnapshot = byte.Parse("0");
            }
            if (triStateTreeView1.GetChecked(triStateTreeView1.Nodes[0].Nodes[0].Nodes[0].Nodes[1]) == TriStateTreeView.CheckState.Checked)
            {
                mc_s.M0_PowerOnVM = byte.Parse("1");
            }
            else
            {
                mc_s.M0_PowerOnVM = byte.Parse("0");
            }


            XmlSerializer xs_s = new XmlSerializer(typeof(WorkflowModulCapturaPrelucrareCaptura));
            FileStream fs_s = new FileStream(@"C:\Users\SmartAdm\Documents\visual studio 2012\Projects\Workflow_Robo\Workflow_Robo\workflow.xml", FileMode.Create);
            xs_s.Serialize(fs_s, mc_s);
            fs_s.Close();
      //=============================================================================================

              WorkflowModulCapturaPrelucrareCaptura mc = new WorkflowModulCapturaPrelucrareCaptura();
              if (triStateTreeView1.GetChecked(triStateTreeView1.Nodes[0].Nodes[1].Nodes[1].Nodes[12]) == TriStateTreeView.CheckState.Checked)
              {
                  mc.M3_CopyResultonserver = byte.Parse("1");
              }
              else
              {
                  mc.M3_CopyResultonserver = byte.Parse("0");
              }

              if (triStateTreeView1.GetChecked(triStateTreeView1.Nodes[0].Nodes[1].Nodes[1].Nodes[0]) == TriStateTreeView.CheckState.Checked)
              {
                  mc.M3_RevertSnapshot = byte.Parse("1");
              }
              else
              {
                  mc.M3_RevertSnapshot = byte.Parse("0");
              }

              XmlSerializer xs = new XmlSerializer(typeof(WorkflowModulCapturaPrelucrareCaptura));
              FileStream fs = new FileStream(@"C:\Users\SmartAdm\Desktop\Workflow_Robo\Workflow_Robo\workflow.xml", FileMode.Create);
              xs.Serialize(fs, mc);
              fs.Close();
      }

      private void button1_Click(object sender, EventArgs e)
      {
          saveFileDialog1.ShowDialog();
          this.Refresh();
      }

      private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
      {
          string name = saveFileDialog1.FileName;
          WriteXMLFileUsingValuesFromNodes(name);
      }





只从xml写入一个节点,我丢失了其他节点。这是我可以调整代码的方式,因此它将在xml的所有节点中编写。



非常感谢!

推荐答案

如果我运行我的代码实际上,它将从下面的代码中为mc对象写下最后一部分





WorkflowModulCapturaPrelucrareCaptura mc = new WorkflowModulCapturaPrelucrareCaptura();

if(triStateTreeView1.GetChecked(triStateTreeView1.Nodes [0] .Nodes [1] .Nodes [1] .Nodes [12])== TriStateTreeView.CheckState.Checked)

{

mc.M3_CopyResultonserver = byte.Parse(1);

}

else

{

mc.M3_CopyResultonserver = byte.Parse(0);

}



if(triStateTreeView1 .GetChecked(triStateTreeView1.Nodes [0] .Nodes [1] .Nodes [1] .Nodes [0])== TriStateTreeView.CheckState.Checked)

{

mc.M3_RevertSnapshot = byte.Parse(1);

}

else

{

mc.M3_RevertSnapshot = byte.Parse(0);

}



XmlSerializer xs = new XmlSerializer (typeof(WorkflowModulCapturaPrelucrareCaptura));

FileStream fs = new FileStream(@C:\Users\SmartAdm \Desktop\Workflow_Robo\Workflow_Robo\workflow.xml,FileMode.Create );

xs.Serialize(fs,mc);

fs.Close();



如果我评论那部分代码它将写入第一部分,对象为mc_s ...



我的xml文件看起来像这样:

< workflow>

< modulsplit>

< analizasplit>

< m0_revertsnapshot> 1

< m0_poweronvm> 1

< m0_loginguest> 1

< m0_copyresultonserver> 1



< extragerebinare>

< m1_revertsnapshot> 1

< m1_poweronvm> 1

< m1_loginguest> 1

< m1_copyresultonserver> 1





< modulcaptura>

< captura>

< m2_revertsnapshot> 1

< m2_poweronvm> 1

< m2_loginguest> 1

< m2_copyresultonserver> 1



< prelucrarecaptura>

< m3_revertsnapshot> 1

< m3_poweronvm> 1

< m3_loginguest> 1

< m3_copyresultonserver> 1









我想将值0或1解析为xml中的元素:)
If I run my code as it is, it will write the last part, from below code, for mc object


WorkflowModulCapturaPrelucrareCaptura mc = new WorkflowModulCapturaPrelucrareCaptura();
if (triStateTreeView1.GetChecked(triStateTreeView1.Nodes[0].Nodes[1].Nodes[1].Nodes[12]) == TriStateTreeView.CheckState.Checked)
{
mc.M3_CopyResultonserver = byte.Parse("1");
}
else
{
mc.M3_CopyResultonserver = byte.Parse("0");
}

if (triStateTreeView1.GetChecked(triStateTreeView1.Nodes[0].Nodes[1].Nodes[1].Nodes[0]) == TriStateTreeView.CheckState.Checked)
{
mc.M3_RevertSnapshot = byte.Parse("1");
}
else
{
mc.M3_RevertSnapshot = byte.Parse("0");
}

XmlSerializer xs = new XmlSerializer(typeof(WorkflowModulCapturaPrelucrareCaptura));
FileStream fs = new FileStream(@"C:\Users\SmartAdm\Desktop\Workflow_Robo\Workflow_Robo\workflow.xml", FileMode.Create);
xs.Serialize(fs, mc);
fs.Close();

If I comment that part of code it will be written the first part, for object mc_s...

My xml file looks like that:
<workflow>
<modulsplit>
<analizasplit>
<m0_revertsnapshot>1
<m0_poweronvm>1
<m0_loginguest>1
<m0_copyresultonserver>1

<extragerebinare>
<m1_revertsnapshot>1
<m1_poweronvm>1
<m1_loginguest>1
<m1_copyresultonserver>1


<modulcaptura>
<captura>
<m2_revertsnapshot>1
<m2_poweronvm>1
<m2_loginguest>1
<m2_copyresultonserver>1

<prelucrarecaptura>
<m3_revertsnapshot>1
<m3_poweronvm>1
<m3_loginguest>1
<m3_copyresultonserver>1




I want to parse value "0" or "1" to elements from xml :)






Hi,

[Serializable]
[XmlRoot("RootElement")]
public class RootElement
{
        [XmlElement]
        public WorkflowModulSplitAnalizaSplit ModulSplitAnalizaSplit { get; set; }
        public WorkflowModulCapturaPrelucrareCaptura ModulCapturaPrelucrareCaptura { get; set;}
}

public class WorkflowModulSplitAnalizaSplit
{
        [XmlElement]
        public byte M0_RevertSnapshot { get; set; }
        public byte M0_PowerOnVM { get; set; }
}

public class WorkflowModulCapturaPrelucrareCaptura
{
        [XmlElement]
        public byte M3_CopyResultonserver { get; set; }
        public byte M3_RevertSnapshot { get; set; }
}


public void WriteXMLFileUsingValuesFromNodes()
        {
            WorkflowModulSplitAnalizaSplit mc_s = new WorkflowModulSplitAnalizaSplit();

            mc_s.M0_RevertSnapshot = Convert.ToByte(1);
            mc_s.M0_PowerOnVM = Convert.ToByte(0);

            XmlSerializer xs_s = new XmlSerializer(typeof(WorkflowModulSplitAnalizaSplit));
            string fileName_1 = "xmlTest_1.xml";
            using (TextWriter tw = new StreamWriter(fileName_1))
            {
                xs_s.Serialize(tw, mc_s);
            }

            //=============================================================================================  

            WorkflowModulCapturaPrelucrareCaptura mc = new WorkflowModulCapturaPrelucrareCaptura();

            mc.M3_CopyResultonserver = Convert.ToByte(1);
            mc.M3_RevertSnapshot = Convert.ToByte(0);

            XmlSerializer xs = new XmlSerializer(typeof(WorkflowModulCapturaPrelucrareCaptura));

            string fileName_2 = "xmlTest_2.xml";
            using (TextWriter tw = new StreamWriter(fileName_2))
            {
                xs.Serialize(tw, mc);
            }

//====================================================================================
            RootElement root = new RootElement();
            root.ModulCapturaPrelucrareCaptura = mc;
            root.ModulSplitAnalizaSplit = mc_s;
            XmlSerializer xmlRoot = new XmlSerializer(typeof(RootElement));

            string fileName_3 = "xmlTest_3.xml";
            using (TextWriter tw = new StreamWriter(fileName_3))
            {
                xmlRoot.Serialize(tw, root);
            }

        }





档案_1





File _1

<?xml version="1.0" encoding="utf-8"?>
<WorkflowModulSplitAnalizaSplit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <M0_RevertSnapshot>1</M0_RevertSnapshot>
  <M0_PowerOnVM>0</M0_PowerOnVM>
</WorkflowModulSplitAnalizaSplit>







File_2






File_2

<?xml version="1.0" encoding="utf-8"?>
<WorkflowModulCapturaPrelucrareCaptura xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <M3_CopyResultonserver>1</M3_CopyResultonserver>
  <M3_RevertSnapshot>0</M3_RevertSnapshot>
</WorkflowModulCapturaPrelucrareCaptura>











File_3








File_3

<?xml version="1.0" encoding="utf-8"?>
<RootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ModulSplitAnalizaSplit>
    <M0_RevertSnapshot>1</M0_RevertSnapshot>
    <M0_PowerOnVM>0</M0_PowerOnVM>
  </ModulSplitAnalizaSplit>
  <ModulCapturaPrelucrareCaptura>
    <M3_CopyResultonserver>1</M3_CopyResultonserver>
    <M3_RevertSnapshot>0</M3_RevertSnapshot>
  </ModulCapturaPrelucrareCaptura>
</RootElement>









他们都按预期写入每个文件。



问候

Jegan





They all write to each files as expected.

Regards
Jegan


这篇关于C#Tri State TreeView XML序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆