【问题标题】:Json.Net is NULLing Nullable<Bool> on DeserializationJson.Net 在反序列化时对 Nullable<Bool> 进行 NULLing
【发布时间】:2014-11-11 16:36:48
【问题描述】:

我已经设置了一个 WebAPI 控制器,它返回一个数据集,该数据集在 SQL DB 上具有可为空的布尔值 (can_personalize)。

当我直接下载 .json 文件时,布尔属性包含数据(真/假)。当我使用 Newtonsoft JsonConvert.DeserializeObject() 时,每个对象的 can_personalize 属性值为 NULL。

我在其他几个类似的问题回答中尝试过建议,但没有一个对问题进行分类。

JSON 示例:

{
  "$id": "1",
  "$values": [
    {
      "$id": "2",
      "TagTypeID": 1,
      "tagIndex": 0,
      "TagCategoryId": 1,
      "validtagtypeid": 0,
      "PrimaryTagTypeValue": "MC",
      "PrimaryDescription": "Motorcycle - Standard",
      "TagCategory": "StandardPlate",
      "SecondaryTagTypeValue": "02",
      "SecondaryDescription": "Personalized",
      "TagEndDate": "9999-12-31T00:00:00",
      "PrimaryEndDate": "9999-12-31T00:00:00",
      "SecondaryEndDate": "12/31/9999",
      "ValidRegex": "^[A-Z\\d -]{1,7}$",
      "primarytagtypeid": 78,
      "secondarytagtypeid": 2,
      "can_personalize": true,
      "ImageName": "redacted"
    }
  ]
}

ADO.NET 模型生成的类:

public partial class ttGetTagListWithCategory_Result
{
    public long TagTypeID { get; set; }
    public int tagIndex { get; set; }
    public Nullable<int> TagCategoryId { get; set; }
    public int validtagtypeid { get; set; }
    public string PrimaryTagTypeValue { get; set; }
    public string PrimaryDescription { get; set; }
    public string TagCategory { get; set; }
    public string SecondaryTagTypeValue { get; set; }
    public string SecondaryDescription { get; set; }
    public Nullable<System.DateTime> TagEndDate { get; set; }
    public Nullable<System.DateTime> PrimaryEndDate { get; set; }
    public string SecondaryEndDate { get; set; }
    public string ValidRegex { get; set; }
    public Nullable<int> primarytagtypeid { get; set; }
    public Nullable<int> secondarytagtypeid { get; set; }
    public bool can_personalize { get; set; }
    public string ImageName { get; set; }
}

JsonConvert 调用:

List<ttGetTagTypeListWithCategory_Result> tagTypeWithCategory =
            JsonConvert.DeserializeObject<List<ttGetTagTypeListWithCategory_Result>>
            (client.DownloadString(WebApiUtility.GetTagTypeListWithCategoryUri()));

【问题讨论】:

  • 您能否显示您要反序列化的字符串、您要反序列化的类以及预期和实际输出?
  • 我在原帖里加了
  • 我还注意到 can_personalize 在类上不可为空......嗯
  • 你能把你的调用添加到 DeserializeObject 吗?
  • 如果这是您传递给DeserializeObject 的实际json,那么问题是您的集合是嵌套的。您没有将代表您的集合的部分传递给它,而是传递给它一个包含该集合的父对象。

标签: c# asp.net-mvc json.net asp.net-web-api


【解决方案1】:

如果我将 [JsonProperty(PropertyName="can_personalize")] 数据注释添加到结果集类,数据会加载到对象中。

【讨论】:

    猜你喜欢
    • 2012-07-27
    • 2011-12-30
    • 2017-06-02
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    相关资源
    最近更新 更多