我是相对新的工作与C#和JSON数据,并寻求指导。我使用C#3.0,与.NET3.5SP1和JSON.NET 3.5r6。
我有一个定义的C#类,我需要从一个JSON结构填充。但是,并非从Web服务检索的条目的每个JSON结构都包含在C#类中定义的所有可能的属性。
我一直在做的似乎是错误的,艰难的方式,只是从JObject中逐个挑选每个值,并将字符串转换为所需的类属性。
JsonSerializer serializer = new JsonSerializer(); var o = (JObject)serializer.Deserialize(myjsondata); MyAccount.EmployeeID = (string)o["employeeid"][0];
将JSON结构反序列化为C#类并处理JSON源中可能缺失的数据的最佳方法是什么?
我的类被定义为:
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; } }
并且要解析的JSON的示例是:
{ "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" ] }
使用JsonConvert.DeserializeObject< RootObject>(string json);
在JSON 2 C#上创建您的课程