C#序列化和反序列化Object對象

在項目開發的過程中,經常有把某個對象序列化保存的需求,但這個保存的對象並不是固定不變的。需要在保存後把它反序列化爲指定的對象。

首先定義兩個包裝類

 public class Expire
        {
            public DateTime ExpireTime { get; set; }
            public Object obj { get; set; }
        }
        public class User
        {
            public String Name { get; set; }
            public int Age { get; set; }
        }

定義兩個測試的方法

public void DeserializeObjWithException(String json)
          {
              try
              {
                  Expire ex = JsonConvert.DeserializeObject<Expire>(json);
                  User user = ex.obj as  User;
                  Console.WriteLine("WithException User name is {0},age is {1}", user.Name, user.Age);
              }
              catch (Exception ex)
              {
                  Console.WriteLine("WithException" + ex.Message);
              }

          }
          public void DeserializeObj(String json)
          {
              try
              {
                  Expire ex = JsonConvert.DeserializeObject<Expire>(json);
                  User user = JsonConvert.DeserializeObject<User>(ex.obj.ToString()); 
                  Console.WriteLine("User name is {0},age is {1}", user.Name,user.Age);
              }
              catch(Exception ex){
                  Console.WriteLine(ex.Message);
              }
           
          }
          public void DeserializeLongObj(String json)
          {
              try
              {
                  Expire ex = JsonConvert.DeserializeObject<Expire>(json);
                  long result = JsonConvert.DeserializeObject<long>(ex.obj.ToString());
                  Console.WriteLine("result is {0}", result);
              }
              catch (Exception ex)
              {
                  Console.WriteLine(ex.Message);
              }

          }

測試用例

public void SerializeObj()
        {
            User user = new User();
            user.Name = "pwd";
            user.Age = 12;
            Expire ex = new Expire();
            ex.ExpireTime = DateTime.Now;
            ex.obj = user;
            String result = JsonConvert.SerializeObject(ex);
            DeserializeObjWithException(result);
            DeserializeObj(result);
            ex.obj = 30;
            result = JsonConvert.SerializeObject(ex);
            DeserializeLongObj(result);
        }

得到的結果

測試名稱: 	SerializeObj
測試結果: 	已通過
結果 的標準輸出: 	
WithException未將對象引用設置到對象的實例。
User name is pwd,age is 12
result is 30

結論:

對於Object對象的返序列化,只要把封閉爲Object的對象ToString(),然後再反序列化就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章