C#处理json文件主要有两种方式:
(1)使用JavaScriptSerializer类,需要引入System.Web.Extension库,并添加下面两个引用:
using System.Web;
using System.Web.Script.Serialization;
主要代码如下所示:
- public class Data
- {
- public int Id { get; set; }
- // [ScriptIgnore]
- public string Name { get; set; }
- public string GetName()
- {
- return Id.ToString() + Name;
- }
- }
- public class JsonPaserWeb
- {
- // Object->Json
- public string Serialize(Data obj)
- {
- JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
- string json = jsonSerializer.Serialize(obj);
- return json;
- }
- // Json->Object
- public Data Deserialize(string json)
- {
- JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
- //执行反序列化
- Data obj = jsonSerializer.Deserialize<Data>(json);
- return obj;
- }
- }
可以使用[ScriptIgnore]标记来让某个变量不参与序列化。
(2)使用DataContractJsonSerializer类,需要引入System.Runtime.Serialization库,并加入如下引用:
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
示例代码如下所示:
- [DataContract]
- public class Data
- {
- [DataMember(Name = "id", Order = 0)]
- public int Id;
- [DataMember(Name = "name", Order = 1)]
- public string Name;
- [DataMember(Name = "child", Order = 2)]
- public Child child = new Child();
- [DataMember(Name = "list", Order = 3)]
- public List<int> Ids = new List<int>();
- [DataMember(Name = "dictionary", Order = 4)]
- public Dictionary<int, Child> dic = new Dictionary<int, Child>();
- [IgnoreDataMember]
- public string Description = "This is a json data class";
- }
- public class Child
- {
- public float Age;
- public string FullName;
- }
- class JsonParserRuntime
- {
- // Object->Json
- public string Serialize(Data obj)
- {
- DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(obj.GetType());
- string json = "";
- using (MemoryStream stream = new MemoryStream())
- {
- jsonSerializer.WriteObject(stream, obj);
- json = Encoding.UTF8.GetString(stream.ToArray());
- }
- return json;
- }
- // Json->Object
- public Data Deserialize(string json)
- {
- Data obj = null;
- using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
- {
- DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Data));
- obj = (Data)jsonSerializer.ReadObject(ms);
- }
- return obj;
- }
- }
使用[DataContract]标记的类,可以同时使用[DataMember(Name = "id", Order = 0)]标记来处理变量,也可以使用[IgnoreDataMember]标记来让某个变量不参与序列化。