Tôi kết nối với dịch vụ web bên thứ ba trả về một đối tượng JSON phức tạp chỉ chứa một vài thông tin tôi thực sự cần.Chọn lọc đọc một phần dữ liệu JSON bằng cách sử dụng JsonSerializer và điền một đối tượng C#
Về cơ bản, tôi chỉ cần mảng trong "giá trị". Từ mảng đó, tôi chỉ cần các thuộc tính "Id", "Tiêu đề" và "Trạng thái".
Tôi muốn đặt các thuộc tính đó vào một lớp C# được gọi là Dự án. Đây là lớp học của tôi:
public class Project
{
public String Id { get; set; }
public String Title { get; set; }
public String Status { get; set; }
}
Tôi đang cố gắng sử dụng mã này để đọc các JSON và làm biến đổi:
using (WebResponse response = request.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
var serializer = new JsonSerializer();
var jsonTextReader = new JsonTextReader(reader);
returnValue = serializer.Deserialize<Project>(jsonTextReader);
}
}
Ví dụ JSON:
{
"odata.metadata":"http://school.edu/Api/1/$metadata#Projects",
"odata.count":"3",
"value":[
{
"odata.id":"http://school.edu/Api/1/Projects('123')",
"[email protected]":"http://school.edu/Api/1/Projects('123')/RelatedProjects",
"[email protected]":"http://school.edu/Api/1/Projects('123')/Tags",
"[email protected]":"http://school.edu/Api/1/Projects('123')/Categories",
"[email protected]":"http://school.edu/Api/1/Projects('123')/ep",
"#CreateLike":{
"target":"http://school.edu/Api/1/Projects('123')/CreateLike"
},
"#CreateShortcut":{
"target":"http://school.edu/Api/1/Projects('123')/CreateShortcut"
},
"#Play":{
"target":"http://school.edu/Play/123"
},
"#SendInvitation":{
"target":"http://school.edu/Api/1/Projects('123')/SendInvitation"
},
"#CopyProject":{
"target":"http://school.edu/Api/1/Projects('123')/CopyProject"
},
"#AddVideoPodcast":{
"target":"http://school.edu/Api/1/Projects('123')/AddVideoPodcast"
},
"#AddEP":{
"target":"http://school.edu/Api/1/Projects('123')/AddEP"
},
"Id":"123",
"Title":"Test Title 1",
"Status":"Viewable"
},
{
"odata.id":"http://school.edu/Api/1/Projects('456')",
"[email protected]":"http://school.edu/Api/1/Projects('456')/RelatedProjects",
"[email protected]":"http://school.edu/Api/1/Projects('456')/Tags",
"[email protected]":"http://school.edu/Api/1/Projects('456')/Categories",
"[email protected]":"http://school.edu/Api/1/Projects('456')/ep",
"#CreateLike":{
"target":"http://school.edu/Api/1/Projects('456')/CreateLike"
},
"#CreateShortcut":{
"target":"http://school.edu/Api/1/Projects('456')/CreateShortcut"
},
"#Play":{
"target":"http://school.edu/Play/456"
},
"#SendInvitation":{
"target":"http://school.edu/Api/1/Projects('456')/SendInvitation"
},
"#CopyProject":{
"target":"http://school.edu/Api/1/Projects('456')/CopyProject"
},
"#AddVideoPodcast":{
"target":"http://school.edu/Api/1/Projects('456')/AddVideoPodcast"
},
"#AddEP":{
"target":"http://school.edu/Api/1/Projects('456')/AddEP"
},
"Id":"456",
"Title":"Test Title 2",
"Status":"Viewable"
},
{
"odata.id":"http://school.edu/Api/1/Projects('789')",
"[email protected]":"http://school.edu/Api/1/Projects('789')/RelatedProjects",
"[email protected]":"http://school.edu/Api/1/Projects('789')/Tags",
"[email protected]":"http://school.edu/Api/1/Projects('789')/Categories",
"[email protected]":"http://school.edu/Api/1/Projects('789')/ep",
"#CreateLike":{
"target":"http://school.edu/Api/1/Projects('789')/CreateLike"
},
"#CreateShortcut":{
"target":"http://school.edu/Api/1/Projects('789')/CreateShortcut"
},
"#Play":{
"target":"http://school.edu/Play/789"
},
"#SendInvitation":{
"target":"http://school.edu/Api/1/Projects('789')/SendInvitation"
},
"#CopyProject":{
"target":"http://school.edu/Api/1/Projects('789')/CopyProject"
},
"#AddVideoPodcast":{
"target":"http://school.edu/Api/1/Projects('789')/AddVideoPodcast"
},
"#AddEP":{
"target":"http://school.edu/Api/1/Projects('789')/AddEP"
},
"Id":"789",
"Title":"Test Title 3",
"Status":"Viewable"
}
],
"odata.nextLink":"http://school.edu/Api/1/Folders('xyz')/Projects?$skip=10&$top=10"
}
tôi chỉ nhận được một null đối tượng trở lại. Nhưng trong trình gỡ lỗi, tôi có thể thấy rằng nó đang lấy tất cả dữ liệu JSON từ webservice.
Làm cách nào để có được những gì tôi cần từ JSON, tạo các đối tượng C# của tôi và bỏ qua tất cả các phần còn lại?
THanks!
Đã xem tài liệu Deserialize dường như không có chức năng vốn có cho việc này. Vì vậy, vì lợi ích của việc dành thời gian chờ đợi một câu trả lời có thể bạn không deserialize toàn bộ điều, sau đó chọn lọc sử dụng các thuộc tính mà bạn cần? –
@ m.edmondson cảm ơn. Câu hỏi ngu ngốc, nhưng không có deserializing, làm thế nào tôi sẽ nhận được dữ liệu/thuộc tính tôi cần? – SkyeBoniwell
Bạn không thể deserialize toàn bộ phản ứng? –