【C#】Newtonsoft.Json 經常使用方法總結

<font size=4>html

[TOC]json

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 實例:spa

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 字符串code

JsonConvert.SerializeObject(person);

{"ID":1,"Name":"張三","Birthday":"2000-01-02T00:00:00","IsVIP":true,"Account":12.34,"Favorites":["吃飯","睡覺"],"Remark":null}

返回縮進的 Json 字符串orm

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;
    }
}

或者:htm

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 中添加數組

上例中的代碼能夠簡化爲:blog

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();

</font>

原文出處:https://www.cnblogs.com/gl1573/p/11660202.html

相關文章
相關標籤/搜索