在项目开发的过程中,经常有把某个对象序列化保存的需求,但这个保存的对象并不是固定不变的。需要在保存后把它反序列化为指定的对象。
首先定义两个包装类
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(),然后再反序列化就可以了。