【发布时间】:2016-07-16 23:01:55
【问题描述】:
我有以下课程:
public class Stuff {
public int Id {get;set;}
public Dictionary<string,object> Values {get;set;}
}
public class ComplexType {
public string Name {get;set;}
public string Id {get;set;}
}
现在一个对象可以包含这样的东西:
var myStuff=new Stuff ();
myStuff.Id=1;
myStuff.Values=new Dictionary<string,object>();
myStuff.Values.Add("magic",new ComplexType { Id=3, Name="Gonzo" };
当我序列化该数据时,一切都很好:
string data=JsonConvert.SerializeObject(myStuff)
然而,在反序列化之后,复杂类型中的类型会丢失:
Stuff ret=JsonConvert.DeserializeObject (data,typeof(Stuff));
复杂数据类型的值是
object {Newtonsoft.Json.Linq.JObject} 而不是 object {MyNamespace.ComplexType}
当我尝试将其作为 JsonResult 的一部分返回时:
return new JsonResult { Data = ret };
如果我从浏览器调用该方法,则该值不包含任何数据,而是一个空数组。
那么如何确保序列化/反序列化不会破坏类型信息?我不明白为什么会发生这种情况:包含序列化数据的字符串根本不包含任何类型信息,并且在反序列化方法时无法“猜测”这可能是什么类型。
有没有办法在不丢失类型信息的情况下对数据进行序列化/反序列化?首选格式是 Json,但如果我需要使用另一种序列化格式(保存该信息)也可以。
注意:字典可能包含不同类型的值,所以值必须是“对象”类型
【问题讨论】:
标签: c# json asp.net-mvc serialization