C# url的编码解码,xml和json的序列化和反序列化

参考中国慕课网dot net web编程应用程序实践

复制代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using System.Runtime.Serialization.Json;

namespace CommonFunctions
{
    public class Functions
    {
        /// <summary>
        /// 对url中待传值进行编码
        /// </summary>
        /// <param name="decodeStr">待编码的字符串</param>
        /// <returns></returns>
        public static string EncodeUrl(string decodeStr)
        {
            byte [] buf = Encoding.UTF8.GetBytes(decodeStr);
            string res = "";
            foreach(byte b in buf)
            {
                res += b.ToString("X2");
            }
            return res;
        }

        /// <summary>
        /// 对url进行解码
        /// </summary>
        /// <param name="encodeStr">待解码的字符串</param>
        /// <returns></returns>
        public static string DecodeUrl(string encodeStr)
        {
            int count = encodeStr.Length / 2;
            byte[] buf = new byte[count];
            for(int i = 0; i < count; i++)
            {
                buf[i] = byte.Parse(encodeStr.Substring(i * 2, 2),System.Globalization.NumberStyles.HexNumber);
            }
            return Encoding.UTF8.GetString(buf);
        }

        /// <summary>
        /// xml序列化
        /// </summary>
        /// <typeparam name="T">待序列化得对象类型</typeparam>
        /// <param name="obj">待序列化的对象</param>
        /// <returns></returns>
        public static string SerializerXml<T>(T obj)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
            MemoryStream ms = new MemoryStream();
            xmlSerializer.Serialize(ms, obj);
            return Encoding.UTF8.GetString(ms.ToArray());
        }

        /// <summary>
        /// xml反序列化
        /// </summary>
        /// <typeparam name="T">待反序列化的对象类型</typeparam>
        /// <param name="xmlStr">待反序列化的xml字符串</param>
        /// <returns></returns>
        public static T DeserializerXml<T>(string xmlStr)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
            byte[] buf = Encoding.UTF8.GetBytes(xmlStr);
            MemoryStream ms = new MemoryStream(buf);
            return (T)xmlSerializer.Deserialize(ms);
        }

        /// <summary>
        /// json序列化
        /// </summary>
        /// <typeparam name="T">待序列化的对象类型</typeparam>
        /// <param name="obj">待序列化的对象</param>
        /// <returns></returns>
        public static string SerializerJson<T>(T obj)
        {
            DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T));
            MemoryStream ms = new MemoryStream();
            jsonSerializer.WriteObject(ms, obj);
            return Encoding.UTF8.GetString(ms.ToArray());
        }

        /// <summary>
        /// json反序列化
        /// </summary>
        /// <typeparam name="T">待反序列化的对象类型</typeparam>
        /// <param name="jsonStr">待反序列化的json字符串</param>
        /// <returns></returns>
        public static T DeserializerJson<T>(string jsonStr)
        {
            DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T));
            byte[] buf = Encoding.UTF8.GetBytes(jsonStr);
            MemoryStream ms = new MemoryStream(buf);
            return (T)jsonSerializer.ReadObject(ms);
        }
    }
}
复制代码
posted @   monkey6  阅读(578)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示