2021-05-12 14:32:11
c# Newtonsoft.Json 常用方法總結
2021-02-19 18:04:04
1 實體類的 Json 序列化和反序列化
我們以如下的 Person 類舉例,其中包含了常用的資料型別:
public 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; } }
建立一個 Person
範例:
Person person = new Person { ID = 1, Name = "張三", Birthday = DateTime.Parse("2000-01-02"), IsVIP = true, Account = 12.34f, Favorites = new string[] { "吃飯", "睡覺" } };
1.1 Json 序列化
返回不縮排的 Json 字串
JsonConvert.SerializeObject(person); {"ID":1,"Name":"張三","Birthday":"2000-01-02T00:00:00","IsVIP":true,"Account":12.34,"Favorites":["吃飯","睡覺"],"Remark":null}
返回縮排的 Json 字串
JsonConvert.SerializeObject(person, Formatting.Indented); { "ID": 1, "Name": "張三", "Birthday": "2000-01-02T00:00:00", "IsVIP": true, "Account": 12.34, "Favorites": [ "吃飯", "睡覺" ], "Remark": null }
1.2 將不縮排的 JSON 字串轉成縮排形式
private string JsonIndentation(string str) { //string str = JsonConvert.SerializeObject(entity); JsonSerializer serializer = new JsonSerializer(); TextReader tr = new StringReader(str); JsonTextReader jtr = new JsonTextReader(tr); object obj = serializer.Deserialize(jtr); if (obj != null) { StringWriter textWriter = new StringWriter(); JsonTextWriter jsonWriter = new JsonTextWriter(textWriter) { Formatting = Formatting.Indented, Indentation = 4, IndentChar = ' ' }; serializer.Serialize(jsonWriter, obj); return textWriter.ToString(); } else { return str; } }
或者:
private string JsonIndentation(string json) { JObject obj = JObject.Parse(json); return obj.ToString(); }
1.3 其他設定
JsonSerializerSettings settings = new JsonSerializerSettings(); // 設定日期格式 settings.DateFormatString = "yyyy-MM-dd"; // 忽略空值 settings.NullValueHandling = NullValueHandling.Ignore; // 縮排 settings.Formatting = Formatting.Indented; JsonConvert.SerializeObject(person, settings);
返回:
{ "ID": 1, "Name": "張三", "Birthday": "2000-01-02", "IsVIP": true, "Account": 12.34, "Favorites": [ "吃飯", "睡覺" ] }
1.4 Json 反序列化
JsonConvert.DeserializeObject<Person>(json);
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.2 JObject 中新增陣列
上例中的程式碼可以簡化為:
JArray array = 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 obj = JObject.Parse(json);
2.4 從 Entity 建立 JObject
JObject obj = JObject.FromObject(person);
用匿名物件建立 JObject
JObject obj = JObject.FromObject(new { name = "jack", age = 18 }); //顯示 { "name": "jack", "age": 18 }
用初始化器
JObject obj = new JObject() { { "name", "jack" }, { "age", 18 } };
2.5 獲取值
int id; if (obj["ID"] != null) id = obj["ID"].Value<int>();
2.6 獲取陣列
Newtonsoft.Json.Linq 不支援直接獲取陣列,但是可以獲取 List,然後再轉化為陣列。
string[] favorites; if (obj["Favorites"] != null) favorites = obj["Favorites"].Value<List<string>>().ToArray();
以上就是c# Newtonsoft.Json 常用方法總結的詳細內容,更多關於c# Newtonsoft.Json的資料請關注it145.com其它相關文章!
相關文章