Tôi tương đối mới để làm việc với dữ liệu C# và JSON và đang tìm kiếm hướng dẫn. Tôi đang sử dụng C# 3.0, với .NET3.5SP1 và JSON.NET 3.5r6.Deserializing dữ liệu JSON để C# bằng cách sử dụng JSON.NET
Tôi có một lớp C# được xác định mà tôi cần phải điền từ một cấu trúc JSON. Tuy nhiên, không phải mọi cấu trúc JSON cho một mục nhập được lấy từ dịch vụ web đều chứa tất cả các thuộc tính có thể được định nghĩa trong lớp C#.
Tôi đã và đang làm những gì có vẻ là sai, khó và chỉ chọn từng giá trị một từ JObject và chuyển chuỗi thành thuộc tính lớp mong muốn.
JsonSerializer serializer = new JsonSerializer();
var o = (JObject)serializer.Deserialize(myjsondata);
MyAccount.EmployeeID = (string)o["employeeid"][0];
Cách tốt nhất để deserialize cấu trúc JSON vào lớp C# và xử lý dữ liệu bị thiếu có thể có từ nguồn JSON là gì?
Lớp học của tôi được định nghĩa là:
public class MyAccount
{
[JsonProperty(PropertyName = "username")]
public string UserID { get; set; }
[JsonProperty(PropertyName = "givenname")]
public string GivenName { get; set; }
[JsonProperty(PropertyName = "sn")]
public string Surname { get; set; }
[JsonProperty(PropertyName = "passwordexpired")]
public DateTime PasswordExpire { get; set; }
[JsonProperty(PropertyName = "primaryaffiliation")]
public string PrimaryAffiliation { get; set; }
[JsonProperty(PropertyName = "affiliation")]
public string[] Affiliation { get; set; }
[JsonProperty(PropertyName = "affiliationstatus")]
public string AffiliationStatus { get; set; }
[JsonProperty(PropertyName = "affiliationmodifytimestamp")]
public DateTime AffiliationLastModified { get; set; }
[JsonProperty(PropertyName = "employeeid")]
public string EmployeeID { get; set; }
[JsonProperty(PropertyName = "accountstatus")]
public string AccountStatus { get; set; }
[JsonProperty(PropertyName = "accountstatusexpiration")]
public DateTime AccountStatusExpiration { get; set; }
[JsonProperty(PropertyName = "accountstatusexpmaxdate")]
public DateTime AccountStatusExpirationMaxDate { get; set; }
[JsonProperty(PropertyName = "accountstatusmodifytimestamp")]
public DateTime AccountStatusModified { get; set; }
[JsonProperty(PropertyName = "accountstatusexpnotice")]
public string AccountStatusExpNotice { get; set; }
[JsonProperty(PropertyName = "accountstatusmodifiedby")]
public Dictionary<DateTime, string> AccountStatusModifiedBy { get; set; }
[JsonProperty(PropertyName = "entrycreatedate")]
public DateTime EntryCreatedate { get; set; }
[JsonProperty(PropertyName = "entrydeactivationdate")]
public DateTime EntryDeactivationDate { get; set; }
}
Và một mẫu của các JSON để phân tích cú pháp là:
{
"givenname": [
"Robert"
],
"passwordexpired": "20091031041550Z",
"accountstatus": [
"active"
],
"accountstatusexpiration": [
"20100612000000Z"
],
"accountstatusexpmaxdate": [
"20110410000000Z"
],
"accountstatusmodifiedby": {
"20100214173242Z": "tdecker",
"20100304003242Z": "jsmith",
"20100324103242Z": "jsmith",
"20100325000005Z": "rjones",
"20100326210634Z": "jsmith",
"20100326211130Z": "jsmith"
},
"accountstatusmodifytimestamp": [
"20100312001213Z"
],
"affiliation": [
"Employee",
"Contractor",
"Staff"
],
"affiliationmodifytimestamp": [
"20100312001213Z"
],
"affiliationstatus": [
"detached"
],
"entrycreatedate": [
"20000922072747Z"
],
"username": [
"rjohnson"
],
"primaryaffiliation": [
"Staff"
],
"employeeid": [
"999777666"
],
"sn": [
"Johnson"
]
}
Cảm ơn. Tuy nhiên tôi nhận được một lỗi "Không thể deserialize JSON mảng vào loại 'System.String'." khi nó cố gắng deserialize (ví dụ) mảng JSON givenname vào chuỗi GivenName của lớp. Các thuộc tính JSON mà tôi đã định nghĩa là chuỗi trong lớp C# chỉ là các mảng phần tử đơn lẻ. Đây là lý do tại sao tôi bắt đầu chọn ra các giá trị từng cái một khi tôi gặp phải vấn đề này trong quá trình deserialize. Ma thuật khác mà tôi đang nhìn? –
câu trả lời được cập nhật ... –
Vì vậy ... 'DateTime AccountStatusExpiration' (ví dụ) không phải là nullable như được định nghĩa trong mã. Nó sẽ làm gì để làm cho nó vô hiệu? Chỉ cần thay đổi 'DateTime' thành' DateTime? '? –