微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用JSON.NET将JSON数据反序列化为C#

我是相对新的工作与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#上创建您的课程

Json.NET文档:Serializing and Deserializing JSON with Json.NET

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐