我正在尝试使用Newtonsoft Json.Net序列化对象。
该对象是一个匿名类型,其中填充了许多异构事物,主要是常规POCO,但也包含JObject
s或JArray
s。
问题是,将NullValueHandling
属性添加到时NullValueHandling.Ignore
,每个null属性都将被忽略,但前提是它是“常规”
.Net对象的一部分。JObject
或内的每个null属性都会JArray
保留。
这是一个最小的示例:
var jobj = JObject.FromObject(new Anything{
x = 1,
y = "bla",
z = null
});
var poco = new Foo {
foo1 = "bar",
foo2 = null
};
var serialized = JsonConvert.SerializeObject(new {
source1 = poco,
source2 = jobj
}, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore});
是否有一种简单的方法也可以忽略这些空值?我错过了一些设置选项吗?还是我必须手动处理?
一个"null"
在值JObject
实际上是一个
_非空JValue
_与JValue.Type
等于JTokenType.Null
。当此值实际出现在JSON中时,它表示null的JSON值。我相信它的存在是为了捕获以下两个JSON对象之间的差异:
"source2": {
"z": null
}
"source2": {
}
在第一种情况下,该属性"z"
带有null
JSON值。在第二种情况下,该属性"z"
不存在。Linq-to-
JSON表示第一种情况是null类型,JValue
而不是JProperty.Value
实际 为null 。
为防止空令牌渗透到您JObject
的值中,请在JObject
从某些POCO 创建时使用适当的序列化器设置:
var jobj = JObject.FromObject(new
{
x = 1,
y = "bla",
z = (int?)null
}, new JsonSerializer { NullValueHandling = NullValueHandling.Ignore } );
(请注意,POCO本身本身不一定已经是JObject
。无类型方法,JsonConvert.DeserializeObject(jsonString)
或者JsonConvert.DeserializeObject<dynamic>(jsonString)
默认情况下,JObject
当根JSON容器jsonString
为JSON对象时,默认情况下将返回a
。)
问题内容: 我有一个用作调用RESTful Web服务的 模板 。这是通过解析器创建的,由于它被用作告诉用户端点模式的模板,因此我不得不想出一种保留所有属性的方法,这就是为什么将其默认值设置为的原因。作为示例,这是对象最初的外观: 然后,用户可以根据需要填写各个字段,例如和: 表示他们只关心这两个领域。现在,我想将此模板()序列化回一个JSON字符串,但只希望显示填充的那些字段。所以我尝试了这个:
问题内容: 尝试运行gradle时,出现以下错误: 但是,当我检查JAVA_HOME变量时,我得到: 我的JAVA_HOME是在.bashrc中定义的,我已经仔细检查过它是否已设置为源。 运行还确认JAVA_HOME设置正确并且在PATH上。 我还检查了符号连接这反过来又正确的符号链接 另外,我检查了或中没有重复的JAVA_HOME定义。 所以我的问题是Gradle如何/为什么找到,更重要的是如何
我还没有反应过来,所以我为这个问题的无知道歉。 我刚刚创建了一个新的React应用程序,我一直在使用文件夹结构。以下是我当前的文件夹结构: 在/react-app/src/components/app/app.js中,我需要导入logo.svg,它位于/react-app/src/assets/images/logo/logo.svg中。 在App.js中,我有以下行来导入徽标: 我得到以下错误:
我试图在登录屏幕上向用户显示progressLoader,直到web服务响应到来。当我按下登录按钮时,它工作。问题是当我试图在响应中从此行隐藏this.setState({showLoader:false})时,我得到的是未定义的this.setState。即使我在这个问题中正确地设置了上下文,this.setState也不是一个函数
问题内容: 我使用以下代码来序列化从外部服务获得的响应,并作为我的服务的一部分返回json响应。但是,当外部服务返回带有时区(10:30:00.000-05.00)的时间值时,杰克逊会将其转换为15:30:00。如何忽略时区值? 问题答案: 您可以创建自定义解串器 告诉杰克逊使用您的自定义解串器 并像这样使用它: 您可以使用Jackson自定义序列化为服务响应添加时区信息
我有一个这样的对象: 我是否可以使用和我的条件来仅在不为负数的情况下包含该值?或者有没有其他的解决办法我可以做到这一点?