c# Newtonsoft.Json 常用方法總結(jié)
1 實體類的 Json 序列化和反序列化
我們以如下的 Person 類舉例,其中包含了常用的數(shù)據(jù)類型:
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; }
}
創(chuàng)建一個 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 序列化
返回不縮進(jìn)的 Json 字符串
JsonConvert.SerializeObject(person);
{"ID":1,"Name":"張三","Birthday":"2000-01-02T00:00:00","IsVIP":true,"Account":12.34,"Favorites":["吃飯","睡覺"],"Remark":null}
返回縮進(jìn)的 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 將不縮進(jìn)的 JSON 字符串轉(zhuǎn)成縮進(jìn)形式
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 其他設(shè)置
JsonSerializerSettings settings = new JsonSerializerSettings(); // 設(shè)置日期格式 settings.DateFormatString = "yyyy-MM-dd"; // 忽略空值 settings.NullValueHandling = NullValueHandling.Ignore; // 縮進(jìn) 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 創(chuàng)建對象
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);
// 創(chuàng)建數(shù)組
JArray array = new JArray();
array.Add(new JValue("吃飯"));
array.Add(new JValue("睡覺"));
obj.Add("Favorites", array);
obj.Add("Remark", null);
2.2 JObject 中添加數(shù)組
上例中的代碼可以簡化為:
JArray array = new JArray("吃飯", "睡覺");
2.3 從 Json 字符串創(chuàng)建 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 創(chuàng)建 JObject
JObject obj = JObject.FromObject(person);
用匿名對象創(chuàng)建 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 獲取數(shù)組
Newtonsoft.Json.Linq 不支持直接獲取數(shù)組,但是可以獲取 List,然后再轉(zhuǎn)化為數(shù)組。
string[] favorites; if (obj["Favorites"] != null) favorites = obj["Favorites"].Value<List<string>>().ToArray();
以上就是c# Newtonsoft.Json 常用方法總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于c# Newtonsoft.Json的資料請關(guān)注腳本之家其它相關(guān)文章!
- C#下Newtonsoft.Json的具體使用
- C# Newtonsoft.Json庫的常用屬性和方法詳解
- C#使用Newtonsoft.Json庫實現(xiàn)JSON數(shù)據(jù)中某個字段值的提取功能
- C# Newtonsoft.Json用法詳解
- C#使用Newtonsoft.Json中的JObject對象
- C# newtonsoft.json中文亂碼問號的解決方案
- C# Newtonsoft.Json 解析多嵌套json 進(jìn)行反序列化的實例
- c#添加Newtonsoft.Json包的操作
- C# Newtonsoft.Json 的使用說明
- C#中Newtonsoft.Json 到 System.Text.Json 遷移避坑指南
相關(guān)文章
C#中DataSet,DataTable,DataView的區(qū)別與用法
這篇文章介紹了C#中DataSet,DataTable,DataView的區(qū)別與用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05
深入理解C#中的享元模式(Flyweight Pattern)
享元模式通過共享對象減少內(nèi)存占用,區(qū)分內(nèi)蘊(yùn)與外部狀態(tài),適用于大量重復(fù)對象場景,下面就來詳細(xì)的介紹一下,感興趣的可以了解一下2025-05-05
C#中結(jié)構(gòu)體定義并轉(zhuǎn)換字節(jié)數(shù)組詳解
在寫C#TCP通信程序時,發(fā)送數(shù)據(jù)時,只能發(fā)送byte數(shù)組,處理起來比較麻煩不說,如果是和VC6.0等寫的程序通信的話,很多的都是傳送結(jié)構(gòu)體,在VC6.0中可以很方便的把一個char[]數(shù)組轉(zhuǎn)換為一個結(jié)構(gòu)體,而在C#卻不能直接把byte數(shù)組轉(zhuǎn)換為結(jié)構(gòu)體,要在C#中發(fā)送結(jié)構(gòu)體,應(yīng)該怎么做呢?2017-11-11
unity3D實現(xiàn)物體任意角度自旋轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了unity3D實現(xiàn)物體任意角度自旋轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-07-07

