如何在.Net中中进行Json序列化?
来源:广州中睿信息技术有限公司
发布时间:2012/10/21 23:25:16 编辑:itlead 阅读 1864

 

  Json与.Net对象的转换主要可以用System.Web.Script.Serialization.JavaScriptSerializer和System.Runtime.Serialization.Json.DataContractJsonSerializer这两个类。此外也可以用第三方的如Json.Net。

  JavaScriptSerializer

  JavaScriptSerializer是一个简单的会序列化类里面所有公共的属性和实例字段,它不受System.Runtime.Serialization.IgnoreDataMember,NonSerialized之类的控制,例如对这样一个类Foo:

  

  进行序列化:  

    

  会得到类似下面的结果:"{\"PageName4\":null,\"PageName5\":null,\"PageName1\":null,\"PageName2\":null,\"PageName3\":null}"   另外JavaScriptSerializer也可以对匿名类型进行序列化。   DataContractJsonSerializer   DataContractJsonSerializer主要用于wcf中,它会受到IgnoreDataMember之类的控制,同样是上边的类,序列化的结果就不一样了:  

    

  结果是"{\"PageName1\":null}"。因为只有PageName1是DataMember。

 

  如果把类前面的[System.Runtime.Serialization.DataContract]去掉,生成的结果是这样:"{\"PageName5\":null,\"PageName7\":null,\"<PageName1>k__BackingField\":null,\"<PageName2>k__BackingField\":null,\"<PageName3>k__BackingField\":null}"可见此时它会无视DataMember特性并且会把私有字段也序列号了,还会在属性的名字上加一些奇怪的东西。

 

  如果把[Serializable]也去掉结果是这样:"{\"PageName1\":null,\"PageName3\":null,\"PageName4\":null,\"PageName5\":null}"此时会无视NonSerialized却没有无视IgnoreDataMember。

 

  所以在使用DataContractJsonSerializer的时候还是建议老老实实的使用DataContract和DataMember来控制想要序列化的东西,一般情况下就用JavaScriptSerializer。

  

 

本站技术原创栏目文章均为中睿原创或编译,转载请注明:文章来自中睿,本站保留追究责任的权利。