NuGet中添加最新穩定版:
Newtonsoft.Json
新建類:
using System;
namespace SystemClass.JsonStudy
{
class Person
{
public int ID { get; set; }
public string Name { get; set; }
public DateTime Birthday { get; set; }
public bool IsVIP { get; set; }
public float Account { get; set; }
public string[] Favorites { get; set; }
public string Remark { get; set; }
public static Person GetPerson()
{
Person person = new Person
{
ID = 1,
Name = "張三",
Birthday = DateTime.Now,
IsVIP = true,
Account = 12.34f,
Favorites = new string[] { "起床", "上班" }
};
return person;
}
}
}
使用:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
namespace SystemClass.JsonStudy
{
class Program
{
static void Main(string[] args)
{
//0 創建一個 Person 實例
Person entity = Person.GetPerson();
string jsonStr = string.Empty;
//1 實體類的 Json 序列化和反序列化
// 1.1 Json 序列化
// 1.1.1返回不縮進的 Json 字符串【見圖01】
jsonStr = JsonConvert.SerializeObject(entity);
// 1.1.2返回縮進的 Json 字符串【見圖02】
jsonStr = JsonConvert.SerializeObject(entity, Formatting.Indented);
// 1.2 將不縮進的 JSON 字符串轉成縮進形式【見圖03】
jsonStr = JsonConvert.SerializeObject(entity);
JObject jObject = JObject.Parse(jsonStr);
jObject.ToString();
// 1.3 其他設置【見圖04】
JsonSerializerSettings settings = new JsonSerializerSettings
{
DateFormatString = "yyyy-MM-dd HH:mm:ss",//設置日期格式
NullValueHandling = NullValueHandling.Ignore,//忽略【null】值
Formatting = Formatting.Indented//縮進
};
jsonStr = JsonConvert.SerializeObject(entity, settings);
// 1.4 Json 反序列化【在不知道類的情況下,可以直接將json字符串轉為JObject】
var person = JsonConvert.DeserializeObject<Person>(jsonStr);
//2 JObject 使用
// 2.1 創建對象
JObject obj = new JObject();
obj.Add("ID", 1);
obj.Add("Name", "張三");
obj.Add("Birthday", DateTime.Parse("2000-01-02"));
obj.Add("IsVIP", true);
obj.Add("Account", 12.34f);
// 創建數組
JArray array = new JArray();
array.Add(new JValue("吃飯"));
array.Add(new JValue("睡覺"));
obj.Add("Favorites", array);
obj.Add("Remark", null);
// 2.1.1 遍歷 JObject 對象
foreach (JProperty item in obj.Children())
{
Console.WriteLine("Name=" + item.Name + "-Value=" + item.Value);
}
// 2.2 JObject 中添加數組
// 上例中的代碼可以簡化為:
JArray array1 = new JArray("吃飯", "睡覺");
// 2.3 從 Json 字符串創建 JObject
string json = "{\"ID\":1,\"Name\":\"張三\",\"Birthday\":\"2000-01-02T00:00:00\",\"IsVIP\":true,\"Account\":12.34,\"Favorites\":[\"吃飯\",\"睡覺\"],\"Remark\":null}";
JObject obj1 = JObject.Parse(json);
Console.WriteLine(obj1.ToString());
Console.WriteLine(AddStr(json, "add", "add"));
// 2.4 從 Entity 創建 JObject
JObject obj2 = JObject.FromObject(entity);
// 2.5 用匿名對象創建 JObject
JObject obj3 = JObject.FromObject(new { name = "jack", age = 18 });
/*顯示
{
"name": "jack",
"age": 18
}
*/
// 2.6 用初始化器
JObject obj5 = new JObject()
{
{ "name" , "李四" },
{ "age", 29 }
};
// 2.7 獲取值
int id;
if (obj1["ID"] != null)
{
id = obj["ID"].Value<int>();
}
JObject _jObject = JObject.Parse("{ID:{ID1:{ID2:'value',name:'valueName'}},'Name':'test','Mark':'Hello Word'}");
var _value = _jObject["ID"]["ID1"]["ID2"].ToString(); //取值
}
/// <summary>添加一個屬性
/// C#給JSON對象添加一個鍵值對
/// </summary>
/// <param name="obj">待添加屬性的對象</param>
/// <param name="key">鍵名</param>
/// <param name="value">值</param>
/// <returns>添加屬性后的對象</returns>
public static object Add(object obj, string key, object value)
{
JObject jObj = JObject.Parse(JsonConvert.SerializeObject(obj));
jObj.Add(new JProperty(key, value));
return JsonConvert.DeserializeObject(jObj.ToString());
}
/// <summary>添加一個屬性
/// C#給JSON字符串添加一個鍵值對
/// </summary>
/// <param name="obj">待添加屬性的對象</param>
/// <param name="key">鍵名</param>
/// <param name="value">值</param>
/// <returns>添加屬性后的對象</returns>
public static object AddStr(string obj, string key, object value)
{
JObject jObj = JObject.Parse(obj);
jObj.Add(new JProperty(key, value));
return JsonConvert.DeserializeObject(jObj.ToString());
}
}
}
