1.在C#中反序列化的方法来源一般有两种。一种是第三方类库Newtonsoft.json.dll 另一种就是微软封装好的类库 命名空间为:using System.Web.Script.Serialization;
两种方法来源使用情况各有好处,在处理数据量较少(万级别一下)的时候使用微软内部的方法比较好,反之使用Newtonsoft.json.dll 中的方法比较好。
2.使用微软类库中的方法序列化和发序列化如下:
JavaScriptSerializer serializer = new JavaScriptSerializer();
序列化:serializer.Serialize();
反序列化:serializer.Deserialize();
3.下面重点使用Newtonsoft.json.dll中的方法,在使用之前需要引用Newtonsoft.json.dll文件以及在使用方法的类中引入以下命名空间:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
将Json格式的数据转化为 list对象或字典类对象
public class KeyValue
{
public string Key { get; set; }
public string Value { get; set; }
}
public class User
{
public string Id { get; set; }
public string Name { get; set; }
}
//将Json转化为keyVal形式的键值对及Dictionary对象
public void fun1()
{
string json2 = "{'Id':5,'Name':'自来也'}";
JObject objects = JObject.Parse(json2);
List<KeyValue> list1 = new List<KeyValue>();
Dictionary<string, string> dic = new Dictionary<string, string>();
foreach (var obj in objects)
{
list1.Add(new KeyValue
{
Key = obj.Key,
Value = obj.Value.ToString()
});
dic.Add(obj.Key, obj.Value.ToString());
}
}
//将Json转化为keyVal形式的键值对
public void fun2()
{
string json1 = "[{'Id':1,'Name':'旗木卡卡西'},{'Id':2,'Name':'漩涡鸣人'},{'Id':3,'Name':'宇智波鼬'}, {'Id':4,'Name':'大筒木辉夜'}]";
JArray arrays = JArray.Parse(json1);
List<KeyValue> list2 = new List<KeyValue>();
foreach (var arr in arrays)
{
JObject obj = JObject.Parse(arr.ToString());
foreach (var o in obj)
{
list2.Add(new KeyValue
{
Key = o.Key,
Value = o.Value.ToString()
});
}
}
}
//将json转换为类对象
public void fun3()
{
string json1 = "[{'Id':1,'Name':'旗木卡卡西'},{'Id':2,'Name':'漩涡鸣人'},{'Id':3,'Name':'宇智波鼬'}, {'Id':4,'Name':'大筒木辉夜'}]";
List<User> user = JsonConvert.DeserializeObject<List<User>>(json1);
}