当前位置:首页>开发>正文

json反序列化问题 如何在.Net中中进行Json序列化

2023-06-29 03:08:01 互联网 未知 开发

 json反序列化问题 如何在.Net中中进行Json序列化

json反序列化问题

给你参考下
using System
using System.IO
using System.Text
using Newtonsoft.Json
using Newtonsoft.Json.Converters

public class JsonHelper
{
///


/// Json序列化
///

public static string ToJson(object item)
{
return JsonConvert.SerializeObject(item)
}

///
/// Json反序列化
///

public static T FromJson(string jsonString)
{
try
{
return JsonConvert.DeserializeObject(jsonString)
}
catch (Exception ex)
{
return default(T)
}
}

///
/// Json反序列化
///

public static object FromJson(Type type, string jsonString)
{
return JsonConvert.DeserializeObject(jsonString, type)
}
}

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

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,  如果把[Serializable]也去掉结果是这样:{PageName1:null,PageName3:null,PageName4:null,PageName5:null}此时会无视NonSerialized却没有无视IgnoreDataMember。
  所以在使用DataContractJsonSerializer的时候还是建议老老实实的使用DataContract和DataMember来控制想要序列化的东西,一般情况下就用JavaScriptSerializer。  
,本站保留追究责任的权利。