序列化:将对象的状态信息转换为可以存储或传输的形式的过程;在序列化期间,对象将其当前状态写入到临时或持久性存储区;,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象;
//序列化
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;
}
番茄之前已经实现调接口的功能了,站在巨人的肩膀上会事半功倍;