序列化和反序列化

序列化:将对象的状态信息转换为可以存储或传输的形式的过程;在序列化期间,对象将其当前状态写入到临时或持久性存储区;,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象;

在这里插入图片描述

//序列化
            string result = IRestful.RestfulAdd(new Resful.EndSerialize().Serialize1(score1));
序列化应拆成两部分:
new Resful.EndSerialize().Serialize1(score1);//调用序列化方法
序列化后的格式为json字符串格式;接口只能识别json字符串格式,将上面的额json字符串格式提交给接口;
IRestful.RestfulAdd();
            //将获取的数据反序列化
            LoginEntity loginEntity1 = new Resful.Serialize().Deserialize(result);
            将收到的json字符串格式转为C#值的格式传给实体;
            UserData userdata1 = loginEntity1.loginModel;

添加引用

using System.Runtime.Serialization.Json;
public class EndSerialize
    {

        #region 序列化
        /// <summary>
        /// 将数据转换成json
        /// </summary>
        /// <param name="person">密码,用户名</param>
        /// <returns></returns>
        public string Serialize1(Score score1)
        {
            //序列化对象
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Score));
            MemoryStream ms = new MemoryStream();
            //将对象转换成json存储
            ser.WriteObject(ms, score1);

            string jsonStr = Encoding.UTF8.GetString(ms.ToArray());
            return jsonStr;
        }
        #endregion

        #region 反序列化
        /// <summary>
        /// 将获取json转为字符串
        /// </summary>
        /// <param name="jsonStr"></param>
        /// <returns></returns>
        public LoginEntity Deserialize(string jsonStr)
        {
            //反序列化对象
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(LoginEntity));
            byte[] byteData = UTF8Encoding.UTF8.GetBytes(jsonStr);
            MemoryStream ms1 = new MemoryStream(byteData);
            LoginEntity flist = (LoginEntity)ser.ReadObject(ms1);
            return flist;
        }

        public UserData DeserializeSon(string jsonStr)
        {
            //反序列化对象
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(UserData));
            byte[] byteData = UTF8Encoding.UTF8.GetBytes(jsonStr);
            MemoryStream ms1 = new MemoryStream(byteData);
            UserData flist = (UserData)ser.ReadObject(ms1);
            return flist;
        }
        #endregion
    }

Score实体里面的属性,以一个为例
CTRL+R+E可以快速生成属性;由此可见快捷键的使用会大大提高编码效率

using System.Runtime.Serialization;  //序列化
[DataContract]//必须申明,否则无法序列化
public class Score
{
    [DataMember(Name = "userId")]//必须申明,否则无法序列化
    private string _userId;
    
    public string UserId { get => _userId; set => _userId = value; }
}

POST请求

添加引用using System.IO;
using System.Net;

public static string RestfulAdd(string jsonParam)
    {
        //string url = "";开发环境调用的Url
    string url = ""; //生产环境调用的url;里面是url公众号接口地址;
    //jsonParam = "{\"className\": \"土木\",\"confirmType\": 0,\"eventName\": \"测试\",\"profession\": \"土木\",\"pushEndTime\":\"2018-12-19 10:01:15\",\"pushStartTime\":\"2018-12-19 10:01:15\",\"templateId\": \"5NZ6U2LvmLRhvq61UxsLHyJ0TzveTpXKiTWmy3iFzcQ\",\"userCode\": \"1231231313\",\"userId\": \"Y9FeDLGhn88LE72jKTeRdJ\",\"userName\": \"薛帅行\"}";

    string json = string.Empty;
    //创建restful的请求
    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
    request.Method = "post";
    request.ContentType = "application/json";

    //创建参数
    string data = jsonParam;
    byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());
    request.ContentLength = byteData.Length;

    //以流的形式附加参数
    using (Stream postStream = request.GetRequestStream())
    {
        postStream.Write(byteData, 0, byteData.Length);
    }

    //接收来自restful的回复
    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
    {
        //以流的形式读取,返回的就是字符串的json格式
        StreamReader reader = new StreamReader(response.GetResponseStream());
        json = reader.ReadToEnd();
    }
    return json;
}
#region 反序列化
        /// <summary>
        /// 将获取json转为字符串
        /// </summary>
        /// <param name="jsonStr"></param>
        /// <returns></returns>
        public LoginEntity Deserialize(string jsonStr)
        {
            //反序列化对象
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(LoginEntity));
            byte[] byteData = UTF8Encoding.UTF8.GetBytes(jsonStr);
            MemoryStream ms1 = new MemoryStream(byteData);
            LoginEntity flist = (LoginEntity)ser.ReadObject(ms1);
            return flist;
        }

番茄之前已经实现调接口的功能了,站在巨人的肩膀上会事半功倍;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 28
    评论
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值