繁体   English   中英

存储在成员字符串中的MaskedText值的Xml序列化

[英]Xml Serialization of MaskedText Value Stored in Member String

//更新我已经添加了更正并完整提供了Form1.c代码。

为了简单起见,我对此做了一些愚蠢的说明。 因此,我所有的表单控件都已设置。 为了这个问题,日期为DateTimePicker(Short),员工编号为maskedTextBox(“ ###-##”),员工名称为简单textBox,SS编号为maskedTextBox(标准SSNum),等等。 为了处理所有这些数据,我创建了一个名为Employee_Data的类,如下所示...

namespace Employee
{
    public class Employee_Data
    {
        //Make Members Xml elements
        [XmlElement("EmployeeNumber")]
        public String EmployeeNumber {get; set;}
        [XmlElement("Date")]
        public DateTime Date {get; set;}
        [XmlElement("EmployeeName")]
        public String EmployeeName {get; set;}
        [XmlElement("SSNumber")]
        public String SSNumber {get; set;}


    }
}

我在Form1.cs中创建一个名为e_d的对象,并在VS中使用自动事件处理。 调试器显示这些值正好存储在类对象中(maskedText值包括破折号)。 但是,一旦我尝试序列化数据,如下所示,被屏蔽的textValues将从xml文件中省略...

    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Serialization;
using System.IO;
using System.Xml;

namespace Employee
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        Employee_Data e_d = new Employee_Data();

        private void EmployyeeNumber_TextChanged(object sender, EventArgs e)
        {
            e_d.EmployeeNumber=EmployeeNumber.Text;
        }

        private void Date_ValueChanged(object sender, EventArgs e)
        {
            e_d.Date=Date.Value;

        }

        private void EmployeeName_TextChanged(object sender, EventArgs e)
        {
            e_d.EmployeeName=EmployeeName.Text;
        }



        private void SSNumber_ValueChanged(object sender, EventArgs e)
        {
          e_d.SSNumber=SSNumber.Text;
    }


    private void saveButton_Click(object sender, EventArgs e)
    {
        saveFileDialog1.DefaultExt = "xml";
        saveFileDialog1.Filter = "XML File (.xml)|*.xml";
        saveFileDialog1.AddExtension = true;
        saveFileDialog1.RestoreDirectory = true;
        saveFileDialog1.ShowDialog();
    }


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


    using (TextWriter texWrt =  new StreamWriter(saveFileDialog1.FileName))
    {
        XmlSerializer serializer = new XmlSerializer(typeof(Employee_Data));
        serializer.Serialize(texWrt, e_d);
    }
}

我已经研究了这个问题,并且在这个特定主题上似乎没有太多。

答案是事件处理或PROFRAMMER FAILURE。 当程序员手动编码用于文本输入的事件处理时(因为VS中的默认值为MaskInputRejected),他忘记设置事件处理程序。 每个人,我都会确保与程序员进行讨论。 但是他在此过程中学到了很多有关csharp和xml的知识。 感谢所有人花时间为您提供帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM