NonSerialized对XML序列化不起作用,同样的代码对Json有用。

时间:2021-09-25 19:40:09
       public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var person = new Person { UserName = "杨彬", Sex = "", Age = 28 };

            var jason = GetSerializerXml(person);
            var jason2 = GetSerializerJson(person);

            label1.Text = jason;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(label1.Text))
                return;
            if (label1.Text.EndsWith(">"))
            {
                Person person = DeSerializerFromXml<Person>(label1.Text);
            }
            if (label1.Text.StartsWith("{"))
            {
                Person person = DeSerializerFromJson<Person>(label1.Text);
            }
        }
        #region Serialization

        public static string GetSerializerXml<T>(T t)
        {
            var xmlSerializer = new XmlSerializer(t.GetType());
            var memoryStream = new MemoryStream();

            try
            {
                var xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
                xmlSerializer.Serialize(xmlTextWriter, t);
                memoryStream = xmlTextWriter.BaseStream as MemoryStream;
                if (memoryStream != null)
                {
                    var utf8Encoding = new UTF8Encoding();
                    string strXml = utf8Encoding.GetString(memoryStream.ToArray());
                    return strXml;
                }

                return string.Empty;
            }
            finally
            {
                memoryStream.Close();
            }
        }

        public static string GetSerializerJson<T>(T t)
        {
            var jsonSerializer = new DataContractJsonSerializer(typeof(T));

            using (var stream = new MemoryStream())
            {
                jsonSerializer.WriteObject(stream, t);

                if (stream != null)
                {
                    var utf8Encoding = new UTF8Encoding();
                    string strJson = utf8Encoding.GetString(stream.ToArray());
                    return strJson;
                }
                return string.Empty;
            }
        }

        public static T DeSerializerFromXml<T>(string xml)
        {
            var xmlSerializer = new XmlSerializer(typeof(T));

            var utf8Encoding = new UTF8Encoding();
            using (var memoryStream = new MemoryStream(utf8Encoding.GetBytes(xml)))
            {
                var t = (T)xmlSerializer.Deserialize(memoryStream);
                return t;
            }
        }

        public static T DeSerializerFromJson<T>(string json)
        {
            var jsonSerializer = new DataContractJsonSerializer(typeof(T));

            var utf8Encoding = new UTF8Encoding();
            using (var memoryStream = new MemoryStream(utf8Encoding.GetBytes(json)))
            {
                var t = (T)jsonSerializer.ReadObject(memoryStream);
                return t;
            }
        }

        #endregion
    }

    [Serializable()]
    public class Person
    {
        public string UserName { get; set; }

        [NonSerialized()]
        public string Sex = "";

        [NonSerialized()]
        public int Age = 0;