Sử dụng JsonConvert.DeserializeObject<T> để chuyển JSON thành đối tượng C# mạnh kiểu (strongly-typed).
Ví dụ: Gọi API, deserialize, lấy item đầu tiên
using Newtonsoft.Json;
using System.Net;
public class Post
{
public int UserId { get; set; }
public int Id { get; set; }
public string Title { get; set; }
public string Body { get; set; }
}
class Program
{
static void Main()
{
using var client = new WebClient();
string json = client.DownloadString("https://jsonplaceholder.typicode.com/posts");
// Deserialize thành mảng Post[]
Post[] posts = JsonConvert.DeserializeObject(json);
// Lấy phần tử đầu tiên
if (posts.Length > 0)
{
Console.WriteLine($"First Post Title: {posts[0].Title}");
Console.WriteLine($"Body: {posts[0].Body}");
}
Console.ReadLine();
}
}
Kết quả
First Post Title: sunt aut facere repellat provident occaecati excepturi optio reprehenderit
Body: quia et suscipit suscipit recusandae consequuntur expedita et cum reprehenderit molestiae...
Deserialize thành List<T> (LINQ friendly)
List posts = JsonConvert.DeserializeObject>(json);
// Hoặc
var posts = JsonConvert.DeserializeObject>(json);
Deserialize động (Dynamic / JObject) - Không cần class
// 1. dynamic
dynamic posts = JsonConvert.DeserializeObject(json);
Console.WriteLine(posts[0].title); // Runtime binding
// 2. JObject / JArray (LINQ to JSON)
JArray array = JArray.Parse(json);
string firstTitle = array[0]["title"].ToString();
Console.WriteLine(firstTitle);
// 3. Chỉ lấy field cần (Anonymous type)
var posts = JsonConvert.DeserializeAnonymousType(json, new[] { new { title = "" } });
Console.WriteLine(posts[0].title);
Tuỳ chọn Deserialize (JsonSerializerSettings)
var settings = new JsonSerializerSettings
{
// Property name mapping
ContractResolver = new CamelCasePropertyNamesContractResolver(), // camelCase JSON -> PascalCase C#
// Null handling
NullValueHandling = NullValueHandling.Ignore,
// Date format
DateFormatString = "yyyy-MM-dd",
// Missing member
MissingMemberHandling = MissingMemberHandling.Ignore,
// Reference loop
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
var posts = JsonConvert.DeserializeObject(json, settings);
HttpClient (Modern, .NET Core 2.1+)
using System.Net.Http;
using System.Net.Http.Json; // .NET 5+ built-in
// .NET 5+ built-in JSON (System.Text.Json)
var posts = await client.GetFromJsonAsync("https://jsonplaceholder.typicode.com/posts");
// Hoặc Newtonsoft với HttpClient
var json = await client.GetStringAsync(url);
var posts = JsonConvert.DeserializeObject(json);
Lưu ý
WebClientđã obsolete (.NET Core 3.0+), hãy dùngHttpClient.- Luôn dùng
using/await usingchoHttpClient(hoặc singleton/static). - Xử lý exception:
HttpRequestException,JsonSerializationException. - Validation: Kiểm tra
posts?.Length > 0trước khi truy cập index.