Các dữ liệu JSON được sử dụng rất thường xuyên trong ứng dụng web, đặc biệt khi cần truyền dữ liệu thông qua ajax. Với Python, Javascript,... thì việc xử lý dữ liệu sẽ dễ dàng hơn. Nếu bạn sử dụng .NET thì bạn phải chuyển đối tượng JSON thành Object hoặc ngược lại để gởi request đi.
Với sự ra đời của ASP.NET Core 3.0, thư viện JSON mặc định đã được thay đổi từ Newtonsoft.Json thành System.Text.Json. Trong bài đăng này, chúng ta sẽ lướt qua 1 số tính năng cơ bản Text Json.
Các thao tác cơ bản
Bạn tạo project .NET Core 3.0 Console Application. Sau đó thêm namespace:
using System.Text.Json;
Khai báo file data.json
{
"myString": "Hello World",
"myInt": 123,
"myBoolean": true,
"myDecimal": 12.3,
"myDateTime1": "2019-09-23T10:10:00",
"myDateTime2": "2019-09-23",
"myStringList": ["apple", "banana", "orange"],
"myDictionary": {
"person1": {
"id": 201,
"name": "C#"
},
"person2": {
"id": 302,
"name": "F#"
}
},
"myAnotherModel": {
"myString": "Hi there",
"myInt": 456
}
}
Sau đó bạn khai báo Model:
public class MyModel
{
public string MyString { get; set; }
public int MyInt { get; set; }
public bool MyBoolean { get; set; }
public decimal MyDecimal { get; set; }
public DateTime MyDateTime1 { get; set; }
public DateTime MyDateTime2 { get; set; }
public List<string> MyStringList { get; set; }
public Dictionary<string, Person> MyDictionary { get; set; }
public MyModel MyAnotherModel { get; set; }
}
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
Trong hàm Main(), bạn thêm đoạn code sau:
var options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = true
};
var jsonString = File.ReadAllText("my-model.json");
var jsonModel = JsonSerializer.Deserialize<MyModel>(jsonString, options);
var modelJson = JsonSerializer.Serialize(jsonModel, options);
Console.WriteLine(modelJson);
Thuộc tính: JsonNamingPolicy.CamelCase báo cho trình biên dịch sẽ không phân biệt chữ hoa hay chữ thường. Ví dụ MyProperty trong C# sẽ tương đương với myProperty trong JSON và ngược lại.WriteIndented = true, có nghĩa là chuỗi JSON sẽ được format khi in ra.
Một số trường hợp đặc biệt
Có một số trường hợp mà tên biến trong C# và JSON khác nhau, lúc này bạn sẽ sử dụng attribute JsonPropertyNameVí dụ: Chúng ta có thuộc tính _full_name trong file JSON nhưng trong C# object tên là name
public class Person
{
public int Id { get; set; }
[JsonPropertyName("_full_name")]
public string Name { get; set; }
}
Bạn lưu ý là chuỗi JSON sẽ sử dụng dấu nháy kép thay vì dấu nháy đơn. Nếu dữ liệu sử dụng dấu nháy đơn, bạn dùng đoạn code này để sửa lại:
var tmp = json.Replace("'", "\"");
Tham khảo
https://morioh.com/p/d883d80f7bdb
Nhatkyhoctap's blog
Nhận xét
Đăng nhận xét