如何在.Net中中进行Json序列化?

 我来答
雪花to
推荐于2016-06-20 · 超过65用户采纳过TA的回答
知道答主
回答量:112
采纳率:100%
帮助的人:126万
展开全部
  Json与.Net对象的转换主要可以用System.Web.Script.Serialization.JavaScriptSerializer和System.Runtime.Serialization.Json.DataContractJsonSerializer这两个类。此外也可以用第三方的如Json.Net。   JavaScriptSerializer   JavaScriptSerializer是一个简单的会序列化类里面所有公共的属性和实例字段,它不受System.Runtime.Serialization.IgnoreDataMember,NonSerialized之类的控制,例如对这样一个类Foo:  [Serializable]   [System.Runtime.Serialization.DataContract]   public partial class Foo  {   [System.Runtime.Serialization.DataMember]   public string PageName1 { get; set; }   [System.Runtime.Serialization.IgnoreDataMember]   public string PageName2 { get; set; }   public string PageName3 { get; set; }   [NonSerialized]   public string PageName4;   public string PageName5;   public static string PageName6;   private string PageName7;  }   进行序列化:   var javaScriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();   var jsonString = javaScriptSerializer.Serialize(obj);   会得到类似下面的结果:{\PageName4\:null,\PageName5\:null,\PageName1\:null,\PageName2\:null,\PageName3\:null}   另外JavaScriptSerializer也可以对匿名类型进行序列化。   DataContractJsonSerializer   DataContractJsonSerializer主要用于wcf中,它会受到IgnoreDataMember之类的控制,同样是上边的类,序列化的结果就不一样了:   var dcSerializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(Foo));   using (var mem = new System.IO.MemoryStream())  {   dcSerializer.WriteObject(mem, obj);   jsonString = System.Text.Encoding.UTF8.GetString(mem.ToArray());  }   结果是{\PageName1\:null}。因为只有PageName1是DataMember。   如果把类前面的[System.Runtime.Serialization.DataContract]去掉,生成的结果是这样:{\PageName5\:null,\PageName7\:null,\<PageName1k__BackingField\:null,\<PageName2k__BackingField\:null,\<PageName3k__BackingField\:null}可见此时它会无视DataMember特性并且会把私有字段也序列号了,还会在属性的名字上加一些奇怪的东西。   如果把[Serializable]也去掉结果是这样:{\PageName1\:null,\PageName3\:null,\PageName4\:null,\PageName5\:null}此时会无视NonSerialized却没有无视IgnoreDataMember。   所以在使用DataContractJsonSerializer的时候还是建议老老实实的使用DataContract和DataMember来控制想要序列化的东西,一般情况下就用JavaScriptSerializer。   ,本站保留追究责任的权利。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式