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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中的序列化反序列化是.NET运行时环境用来支持用户定义类型的流化的机制。序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候再把介质中的东西还原成对象。在进行这些操作的时候都需要这个可以被序列化,要能被序列化,就得给类头加[Serializable]特性。下面是C#序列化反序列化的方法: 1.使用BinaryFormatter进行序列化反序列化,BinaryFormatter是.NET Framework中的一个类,它可以将对象序列化为二进制流,也可以将二进制流反序列化对象。 ```csharp //序列化 using System.IO; using System.Runtime.Serialization.Formatters.Binary; public static void SerializeObject(string filename, object obj) { BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream(filename, FileMode.Create)) { formatter.Serialize(stream, obj); } } //反序列化 public static object DeserializeObject(string filename) { BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream(filename, FileMode.Open)) { return formatter.Deserialize(stream); } } ``` 2.使用DataContractSerializer进行序列化反序列化,DataContractSerializer是.NET Framework中的一个类,它可以将对象序列化为XML格式,也可以将XML格式反序列化对象。 ```csharp //序列化 using System.IO; using System.Runtime.Serialization; using System.Xml; public static void SerializeObject(string filename, object obj) { DataContractSerializer serializer = new DataContractSerializer(obj.GetType()); using (XmlWriter writer = XmlWriter.Create(filename)) { serializer.WriteObject(writer, obj); } } //反序列化 public static object DeserializeObject(string filename, Type type) { DataContractSerializer serializer = new DataContractSerializer(type); using (XmlReader reader = XmlReader.Create(filename)) { return serializer.ReadObject(reader); } } ``` 3.使用Json.NET进行序列化反序列化,Json.NET是一个流行的第三方JSON库,它可以将对象序列化为JSON格式,也可以将JSON格式反序列化对象。 ```csharp //序列化 using Newtonsoft.Json; public static void SerializeObject(string filename, object obj) { string json = JsonConvert.SerializeObject(obj); File.WriteAllText(filename, json); } //反序列化 public static object DeserializeObject(string filename, Type type) { string json = File.ReadAllText(filename); return JsonConvert.DeserializeObject(json, type); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值