5

我对使用 Newtonsoft JSON.NET 库进行反序列化/序列化有疑问:

我收到这个 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" : "webtest@test.com",
        "id" : 50,
        "fullName" : "name",
        "department" : "department"
    } ],
    "attribute" : {
      "nbrOfUse" : 1,
      "lastUse" : "2013-01-03T09:57:28-0500"
    }       
}

我的问题是这部分:

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

在我的address课堂上,是否可以执行以下操作:

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

我不会使用JObject.Parse(...),因为 json 非常大

我的课 :

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; }
}
4

2 回答 2

1

您需要为“属性”创建自定义类型,例如:

    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; }

    }

并在您的 Address 类中创建一个 Object of Attribute 类。

于 2013-01-03T20:55:34.790 回答
0

您可以使用的一种可能的解决方案(看起来有点笨拙)是在解析 JSON 字符串之前对其进行操作,例如使用正则表达式。

您将识别并替换

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

"lastUse" : "2013-01-03T09:57:28-0500"

然后,您的序列化程序将识别 DateTime?名为“lastUsed”的属性

于 2015-08-28T12:25:35.060 回答