1. 程式人生 > 程式設計 >Newtonsoft.Json.Linq 常用方法總結

Newtonsoft.Json.Linq 常用方法總結

1、Entity to Json

1.1、準備工作

我們以如下的 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.2、Entity to 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 } 複製程式碼
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();
}
複製程式碼

其他設定

JsonSerializerSettings settings = new JsonSerializerSettings();
// 設定日期格式
settings.DateFormatString = "yyyy-MM-dd";
// 忽略空值
settings.NullValueHandling = NullValueHandling.Ignore;
// 縮排
settings.Formatting = Formatting.Indented;

JsonConvert.SerializeObject(person,settings);
複製程式碼

返回:

{
  "ID": 1,"Birthday": "2000-01-02","Favorites": [
    "吃飯","睡覺"
  ]
}
複製程式碼

1.3、Json to Entity

JsonConvert.DeserializeObject<Person>(json);
複製程式碼

2、Linq To Json

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、從 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.3、從 Entity 建立 JObject

JObject obj = JObject.FromObject(person);
複製程式碼

用匿名物件建立 JObject

JObject obj = JObject.FromObject(new { name = "jack",age = 18 });
複製程式碼

顯示:

{
  "name": "jack","age": 18
}
複製程式碼

2.2、獲取值

int id;
if (obj["ID"] != null)
    id = obj["ID"].Value<int>();
複製程式碼

獲取陣列

Newtonsoft.Json.Linq 不支援直接獲取陣列,但是可以獲取 List,然後再轉化為陣列。

string[] favorites;
if (obj["Favorites"] != null)
    favorites = obj["Favorites"].Value<List<string>>().ToArray();
複製程式碼