Newtonsoft.Json.dll是.NET 下开源的json格式序列号和反序列化的类库,利用此类库,可以方便地操作json数据,其中在反序列化时,可以直接将格式化的json数据处理成预定义的实体类,也可以生成对应的匿名类
///
/// 用于测试的预定义实体类
///
class JsonTest
{
///
/// 初始化
///
public void Init()
{
JsonTest test = new JsonTest();
test.Id = "2017";
test.Name = "测试数据";
test.Data = new List<string>() { "1", "2", "3", "4", "5" };
}
List _Data = new List<string>();
public List Data
{
get { return _Data; }
set { _Data = value; }
}
String _Name = String.Empty;
public String Name
{
get { return _Name; }
set { _Name = value; }
}
String _Id = String.Empty;
public String Id
{
get { return _Id; }
set { _Id = value; }
}
}
static void Main(string[] args)
{
SerializeTest();
Console.ReadLine();
}
public static void SerializeTest()
{
JsonTest test = new JsonTest();
test.Init();
String json = JsonConvert.SerializeObject(test,Formatting.Indented);
Console.WriteLine(json);
}
例子中使用了JsonConvert.SerializeObject的一个重载方法 Formatting是一个枚举类型,表示是否将json数据格式化,运行效果如下
static void Main(string[] args)
{
DeSerializeTest();
Console.ReadLine();
}
public static void DeSerializeTest()
{
String jsonstr = "{\"Id\":\"2017\",\"Name\":\"测试数据\",\"Data\":[\"1\",\"2\",\"3\",\"4\",\"5\"]}";
var test = JsonConvert.DeserializeObject(jsonstr);
String str = "Id:{0}\nName:{1}\nData:{2}";
Console.WriteLine(str, test.Id, test.Name, String.Join(",", test.Data));
}
反序列化为实体类时,调用JsonConvert.DeserializeObject,参数为待序列化的json字符串,运行效果如下
需要引入名空间 using Newtonsoft.Json.Linq
static void Main(string[] args)
{
DeSerializeTest_Anonymous();
Console.ReadLine();
}
public static void DeSerializeTest_Anonymous()
{
String jsonstr = "{\"Id\":\"2017\",\"Name\":\"测试数据\",\"Data\":[\"1\",\"2\",\"3\",\"4\",\"5\"]}";
var test = JsonConvert.DeserializeObject(jsonstr) as JObject;
String str = "Id:{0}\nName:{1}\nData:{2}";
Console.WriteLine(str, test["Id"], test["Name"], String.Join(",", test["Data"]));
}