我正在使用JsonConvert。反序列化对象(json.ToString());反序列化JSON并在相关模型中填充我的字段。在JSON中缺少数据之前,这一切都很好。基本上,我将只使用“key:null”,而不是“key:value”。
我对JsonConverter的理解是,它将创建一个对象,在这个对象中,我应该能够通过构造函数(在我的情况下,由于未知原因没有调用)或通过这里提到的标记(JSON缺少属性的默认值)用默认值填充字段。net或here:为什么我用JSON反序列化。NET忽略我的默认值?
我两者都尝试过,但都不会导致相关字段被初始化。当然,如果JSON中没有数据,则无法对相关模型进行反序列化。但是,我希望我仍然可以使用默认值初始化一些值,然后JsonConverter会忽略(而不是覆盖)这些值(就像现在发生的情况一样)。然而,这似乎是不可能的?
以前尝试的源代码
模型类
namespace Project.MyJob
{
public class JsonModel
{
public JsonModel()
{
Type_X type_x = new Type_X();
// This is not doing anything. I would have expected that the
// class' constructor would be called but, no.
}
public string objectNumber { get; set; }
public string objectFamily { get; set; }
public string objectOrder { get; set; }
public string location { get; set; }
public string place { get; set; }
public string inventionTime { get; set; }
public string lastUpdate { get; set; }
public string condition { get; set; }
public Type_X Type_X { get; set; }
public List<Actions> actions { get; set; }
}
public class Actions
{
public string count { get; set; }
public string datetime { get; set; }
public string place { get; set; }
public string status { get; set; }
}
public class Type_X
{
public Type_X
{
// This should be executed when a new Type_X object is created? Also
// not.
partA = "null";
}
[DefaultValue("null")]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
public string partA { get; set; }
// Trying public string partA { get; set; } = "null"; also does
// nothing.
[DefaultValue("null")]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
public string PartB { get; set; }
[DefaultValue("null")]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
public string partC { get; set; }
[DefaultValue("null")]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
public string partD { get; set; }
[DefaultValue("null")]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
public string partE { get; set; }
}
}
使用默认值创建JSON对象(默认值无效)
JObject = JsonConvert.DeserializeObject<JsonModel>(json.ToString(), new
JsonSerializerSettings {DefaultValueHandling =
DefaultValueHandling.Populate});
创建对象的下游使用示例
JObject.actions[i].count + "more text"
当不依赖于默认值时,上述方法有效。
您使用了错误的设置。
如果希望在反序列化期间忽略JSON中的值,则需要设置NullValueHandling=NullValueHandling。忽略设置中的。默认值是Include,这意味着如果JSON中有一个特定属性的显式null,那么该属性将在对象上设置为null,覆盖您可能设置的任何默认值。
<代码>默认值处理。填充意味着如果JSON中完全缺少键(这与设置为null不同),那么它将使用由属性提供的值。请注意,如果JSON中有一个显式的null,即使将null值处理设置为Ignore,此设置也不会使用属性中的默认值。因此,如果在这种情况下需要默认值,最好的方法是在构造函数中设置它。
因此,简而言之,要获得您想要的行为:
演示小提琴:https://dotnetfiddle.net/kyUjFz
我在Windows 10上使用的是VSCode 1.47.3。我无法编辑json中的默认设置: 打开默认设置(“文件 - 我尝试过以管理员身份打开VSCode,卸载并重新安装,重新启动计算机,并将其降级到1.46,但仍然无法编辑。有人知道如何解决这个问题吗?
基本上我想知道,如果得到空值,如何将默认值设置为Pojo变量? 我在项目中使用了Spring数据Cassandra。布尔列中的某些条目为null,当我从数据库中提取记录时,它会引发以下错误: 布尔值不能为null 甚至我也面临着同样的问题。。。列。 因此,当数据库的列为null时,我想给这些字段一个默认值。 这是我希望的最后一个例子: 我已经了解了//...但是我什么都没有。 请帮帮我。
我正在使用postgreSQL 9.3.1,spring 4和JPA 1.9进行我的项目。我需要使用下面的JPA代码为数据库中的一列设置默认值。此外,我还尝试在代码中传递数据类型“整数”和“int”。但仍然没有设置默认值。任何人都可以建议我缺少什么或我需要为JPA 1.9做任何设置吗? 提前感谢。 @Column(name=“cust_id”,columnDefinition = “int def
我在Thymeleaf模板中的样式标记内设置CSS字体变量。字体值来自模型对象。我还想应用默认颜色,以防模型attirbute不存在。我使用elvis运算符选择默认值elvis运算符链接 但是当我呈现模板时,它会搜索brandingConfig,然后是themeConfig,然后是fontName,但fontName在themeConfig中不存在。因此,它不会选择默认值,而是抛出一个错误。下面是
在我的quarkus应用程序中有两个命名的数据源,我们称之为A和B: Quarkus.datasource.a.db-kind=Oracle Quarkus.datasource.b.db-kind=Oracle 因此,每次应用程序启动时,我都会收到这样的通知: 警告:无法确定默认数据源的数据库类型
本文向大家介绍mysql中datetime类型设置默认值方法,包括了mysql中datetime类型设置默认值方法的使用技巧和注意事项,需要的朋友参考一下 通过navicat客户端修改datetime默认值时,遇到了问题。 数据库表字段类型datetime,原来默认为NULL,当通过界面将默认值设置为当前时间时,提示“1067-Invalid default value for 'CREATE_T