Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JSON.NET deserialize/serialize JsonProperty JsonObject

I have a question for deserialize/serialize with the Newtonsoft JSON.NET library:

I receive this json :

 {
    "customerName" : "Lorem",
    "id": 492426
    "sequence": 1232132
    "type" : 3,
    "status" : 0,
    "streetNumber" : 9675,
    "streetName" : "Lorem",
    "suite" : null,
    "city" : "IPSUM",
    "provinceCode" : "QC",
    "postalCode" : "H1P1Z3",
    "routeNumber" : 0,
    "poBox" : 0,
    "streetType" : "CH",
    "userId" : 25,
    "streetDirection" : null,
    "countryCode" : "CA",
    "customerNickName" : "Lorem ipsum",
    "streetSuffix" : null,
    "contacts" : [ {
        "status" : 0,
        "telephone" : 4445555555,
        "extension" : 0,
        "email" : "[email protected]",
        "id" : 50,
        "fullName" : "name",
        "department" : "department"
    } ],
    "attribute" : {
      "nbrOfUse" : 1,
      "lastUse" : "2013-01-03T09:57:28-0500"
    }       
}

and my problem is with this part :

    "attribute" : {
      "nbrOfUse" : 1,
      "lastUse" : "2013-01-03T09:57:28-0500"
    }

In my address class, is it possible to do something like:

    [JsonProperty(PropertyName = "lastUse", ObjectName="attribute")]
    or [JsonProperty(PropertyName = "lastUse")][JsonObject(PropertyName = "attribute")]
    or something like this ...
    public DateTime? LastUse { get; set; }

I wouldn't use JObject.Parse(...) because the json is very big

My class :

public class Address
{
    /// <summary>
    /// Gets or sets the id of the <see cref="Address" /> class.
    /// </summary>
    /// <value>
    /// id from index as400 for validating address with canada post
    /// Type Int64, The id.
    /// </value>
    [JsonProperty(PropertyName = "id")]
    public int Id { get; set; }

    /// <summary>
    /// Gets or sets the number of the <see cref="Company" /> class.
    /// </summary>
    /// <value>
    /// Type String, The number.
    /// </value>
    [JsonProperty(PropertyName = "streetNumber")]
    [Display(Name = "CompanyNumber", ResourceType = typeof(AccountModels))]
    //[MustBeEmptyIfAnotherIsNotEmpty("PoBox", ErrorMessageResourceType = typeof(GenericValidator), ErrorMessageResourceName = "MustBeEmptyIfAnotherIsNotEmpty")]
    public string Number { get; set; }

    /// <summary>
    /// Gets or sets the type of the street.
    /// </summary>
    /// <value>
    /// The type of the street.
    /// </value>
    [JsonProperty(PropertyName = "streetType")]
    [Display(Name = "StreetType", ResourceType = typeof(AccountModels))]
    //[MustBeEmptyIfAnotherIsNotEmpty("PoBox",false, ErrorMessageResourceType = typeof(GenericValidator), ErrorMessageResourceName = "MustBeEmptyIfAnotherIsNotEmpty")]
    public string StreetType { get; set; }

    /// <summary>
    /// Gets or sets the street of the <see cref="Company" /> class.
    /// </summary>
    /// <value>
    /// Type String, The street.
    /// </value>
    [JsonProperty(PropertyName = "streetName")]
    [Display(Name = "CompanyStreet", ResourceType = typeof(AccountModels))]
    [StringLength(50, ErrorMessageResourceType = typeof(GenericValidator), ErrorMessageResourceName = "Length", MinimumLength = 2)]
    //[MustBeEmptyIfAnotherIsNotEmpty("PoBox", ErrorMessageResourceType = typeof(GenericValidator), ErrorMessageResourceName = "MustBeEmptyIfAnotherIsNotEmpty")]
    public string Street { get; set; }

    [Display(Name = "StreetDirection", ResourceType = typeof(AccountModels))]
    [StringLength(2, ErrorMessageResourceType = typeof(GenericValidator), ErrorMessageResourceName = "Length", MinimumLength = 0)]
    public string StreetDirection { get; set; }

    [Display(Name = "StreetSuffix", ResourceType = typeof(AccountModels))]
    [StringLength(1, ErrorMessageResourceType = typeof(GenericValidator), ErrorMessageResourceName = "Length", MinimumLength = 0)]
    public string StreetSuffix { get; set; }

    /// <summary>
    /// Gets or sets the street suite of the <see cref="Company" /> class.
    /// </summary>
    /// <value>
    /// Type String, The street suite.
    /// </value>
    [JsonProperty(PropertyName = "suite")]
    [Display(Name = "CompanyStreetSuite", ResourceType = typeof(AccountModels))]
    [StringLength(50, ErrorMessageResourceType = typeof(GenericValidator), ErrorMessageResourceName = "Length", MinimumLength = 0)]
    //[MustBeEmptyIfAnotherIsNotEmpty("PoBox",false, ErrorMessageResourceType = typeof(GenericValidator), ErrorMessageResourceName = "MustBeEmptyIfAnotherIsNotEmpty")]
    public string StreetSuite { get; set; }

    /// <summary>
    /// Gets or sets the city of the <see cref="Company" /> class.
    /// </summary>
    /// <value>
    /// Type String, The city.
    /// </value>
    [Required]
    [JsonProperty(PropertyName = "city")]
    [Display(Name = "CompanyCity", ResourceType = typeof(AccountModels))]
    public string City { get; set; }

    /// <summary>
    /// Gets or sets the province of the <see cref="Company" /> class.
    /// </summary>
    /// <value>
    /// Type String, The province.
    /// </value>
    [Required]
    [Display(Name = "CompanyProvince", ResourceType = typeof(AccountModels))]
    [JsonProperty(PropertyName = "provinceCode")]
    public string Province { get; set; }

    /// <summary>
    /// Gets or sets the postal code of the <see cref="Company" /> class.
    /// </summary>
    /// <value>
    /// Type String, The postal code.
    /// </value>
    [JsonProperty(PropertyName = "postalCode")]
    [Display(Name = "CompanyPostalCode", ResourceType = typeof(AccountModels))]
    [PostalCode("Country", ErrorMessageResourceType = typeof(GenericValidator), ErrorMessageResourceName = "PostalCode")]
    public string PostalCode { get; set; }

    /// <summary>
    /// Gets or sets the country of the <see cref="Company" /> class.
    /// </summary>
    /// <value>
    /// Type String, The country.
    /// </value>
    [JsonProperty(PropertyName = "country")]
    [Display(Name = "Country", ResourceType = typeof(AccountModels))]
    public string Country { get; set; }

    // ....//

    /*record info*/
    [Display(Name = "modifyDate", ResourceType = typeof(Resources.Models.Address))]
    public DateTime ModifyDate { get; set; }

    [Display(Name = "endDate", ResourceType = typeof(Resources.Models.Address))]
    public DateTime? EndDate { get; set; } // when she deactivated

    [Display(Name = "lastUse", ResourceType = typeof(Resources.Models.Address))]
    public DateTime? LastUse { get; set; }

    [Display(Name = "nbrOfUse", ResourceType = typeof(Resources.Models.Address))]
    public int NbrOfUse { get; set; }
}
like image 648
Olivier Albertini Avatar asked Nov 13 '22 14:11

Olivier Albertini


1 Answers

You need to make custom type for "attribute" like:

    public class Attribute {

        [JsonProperty(PropertyName = "nbrOfUse")]
        public int _nbrOfUse { get; set; }
        [JsonProperty(PropertyName = "streetType")]
        [Display(Name = "lastUse", ResourceType = typeof(AccountModels))]
        public string _lastUse { get; set; }

    }

And make an Object of Attribute class in your Address class.

like image 156
Umayr Avatar answered Nov 15 '22 07:11

Umayr