日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

      首頁(yè)編程開(kāi)發(fā)C#.NET → C# 序列化與反序列化幾種格式之間的轉(zhuǎn)換

      C# 序列化與反序列化幾種格式之間的轉(zhuǎn)換

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2013/1/28 11:07:20字體大小:A-A+

      作者:西西點(diǎn)擊:0次評(píng)論:0次標(biāo)簽: 序列化

      這里介紹了幾種方式之間的序列化與反序列化之間的轉(zhuǎn)換

      首先介紹的如何序列化,將object對(duì)象序列化常見(jiàn)的兩種方式即string和xml對(duì)象;

      第一種將object轉(zhuǎn)換為string對(duì)象,這種比較簡(jiǎn)單沒(méi)有什么可談的;

       public string ScriptSerialize<T>(T t)
              {
                  JavaScriptSerializer serializer = new JavaScriptSerializer();
                  return serializer.Serialize(t);
              }


      第二種將object轉(zhuǎn)換為xml對(duì)象:

       public string ScriptSerializeToXML<T>(T t)
              {
                  XmlSerializer serializer = new XmlSerializer(typeof(T));
                  MemoryStream mem = new MemoryStream();
                  XmlTextWriter writer = new XmlTextWriter(mem,Encoding.UTF8);
                  XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
                  ns.Add("","");
                  serializer.Serialize(writer,t,ns);
                  writer.Close();
                  return Encoding.UTF8.GetString(mem.ToArray());
              }

      下面我主要講string對(duì)象反序列化為對(duì)應(yīng)的對(duì)象;

      一、將string對(duì)象反序列化為object對(duì)象

       public T ScriptDeserialize<T>(string strJson)
              {
                  JavaScriptSerializer serializer = new JavaScriptSerializer();
                  return serializer.Deserialize<T>(strJson);
              }

      二、將string對(duì)象反序列化為list對(duì)象

       public List<T> JSONStringToList<T>(string strJson)
              {
                  JavaScriptSerializer serializer = new JavaScriptSerializer();
                  List<T> objList = serializer.Deserialize<List<T>>(strJson);
                  return objList;
              }

      三、將string對(duì)象反序列化為datatable對(duì)象

        public DataTable JSONStringToDataTable<T>(string strJson)
              {
                  DataTable dt = new DataTable();
                  if (strJson.IndexOf("[") > -1)//如果大于則strJson存放了多個(gè)model對(duì)象
                  {
                      strJson = strJson.Remove(strJson.Length - 1, 1).Remove(0, 1).Replace("},{", "};{");
                  }
                  JavaScriptSerializer serializer = new JavaScriptSerializer();
                  string[] items = strJson.Split(';');
      
                  foreach (PropertyInfo property in typeof(T).GetProperties())//通過(guò)反射獲得T類型的所有屬性
                  {
                      DataColumn col = new DataColumn(property.Name,property.PropertyType);
                      dt.Columns.Add(col);
                  }
                  //循環(huán) 一個(gè)一個(gè)的反序列化
                  for (int i = 0; i < items.Length; i++)
                  {
                      DataRow dr = dt.NewRow();
                      //反序列化為一個(gè)T類型對(duì)象
                      T temp = serializer.Deserialize<T>(items[i]);
                      foreach (PropertyInfo property in typeof(T).GetProperties())
                      {
                          dr[property.Name] = property.GetValue(temp,null);
                      }
                      dt.Rows.Add(dr);
                  }
                  return dt;
              }

      四、將xml對(duì)象反序列化為object對(duì)象

      public T JSONXMLToObject<T>(string strJson)
              {
                  XmlDocument xdoc = new XmlDocument();
                  try
                  {
                      xdoc.LoadXml(strJson);
                      XmlNodeReader reader = new XmlNodeReader(xdoc.DocumentElement);
                      XmlSerializer ser = new XmlSerializer(typeof(T));
                      object obj = ser.Deserialize(reader);
                      return (T)obj;
                  }
                  catch
                  {
                      return default(T);
                  }
              }

      現(xiàn)在用具體的實(shí)例來(lái)如何調(diào)用他們呢?特別要注意的是將xml對(duì)象反序列化objcet對(duì)象

       public class LoginObject
          {
                public string Account { get; set;}
                public string Password { get; set;}
           }

       1  LoginObject loginObject = new LoginObject { Account = account, Password = password };
       2             ExTools.Manage.Class.CScriptSerialize Serialize = new Class.CScriptSerialize();
       3             //將object對(duì)象轉(zhuǎn)換為string
       4              string strJson=Serialize.ScriptSerialize(loginObject);
       5           
       6             //將object對(duì)象轉(zhuǎn)換為xml對(duì)象
       7             string strJson = Serialize.ScriptSerializeToXML(loginObject);
       8            
       9 
      10             //轉(zhuǎn)換為list對(duì)象
      11              List<LoginObject> list = Serialize.JSONStringToList<LoginObject>(strJson);
      12             //將一個(gè)xml對(duì)象轉(zhuǎn)換為object對(duì)象
      13            strJson = strJson.Substring(1, strJson.Length - 1);
      14             loginObject = Serialize.JSONXMLToObject<LoginObject>(strJson);
      15             //將字符串轉(zhuǎn)換為dataTable
      16             DataTable dt = Serialize.JSONStringToDataTable<LoginObject>(strJson);
      17             //將字符串轉(zhuǎn)換為object對(duì)象
      18             loginObject = Serialize.ScriptDeserialize<LoginObject>(strJson);

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過(guò)難過(guò)
        • 5 囧
        • 3 圍觀圍觀
        • 2 無(wú)聊無(wú)聊

        熱門評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)