在項目開發的過程中,經常有把某個對象序列化保存的需求,但這個保存的對象並不是固定不變的。需要在保存後把它反序列化爲指定的對象。
首先定義兩個包裝類
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(),然後再反序列化就可以了。