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(),然后再反序列化就可以了。

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