JSON 序列化程序 - 当布尔值设置为 false 时,前端缺少键
Posted
技术标签:
【中文标题】JSON 序列化程序 - 当布尔值设置为 false 时,前端缺少键【英文标题】:JSON serializer - when boolean value set to false key is missing on frontend 【发布时间】:2019-12-10 03:00:31 【问题描述】:我有一个 webapi (ASP.Net Core) + 前端应用程序 (Angular)。我正在将一些存储在磁盘上的 json 文件中的数据从后端传递到前端。在前端,对于布尔属性,如果值设置为 false,我会丢失它们。使用 Newtonsoft.JSON。
假设我有以下课程:
public class Element<T>
public Element(T value, T defaultValue, string name)
Value = value;
DefaultValue = defaultValue;
TypeName = name
public T Value get; set;
public T DefaultValue get; set;
public string TypeName get; set;
对象创建:
public class Setting
public Element<bool> SomeBoolObject get; set; = new Element<bool>(false, false, "boolean");
磁盘上的 JSON 文件:
"SomeBoolObject":
"value": false,
"defaultvalue": false,
"typename": "boolean"
然后在前端我只有
"SomeBoolObject":
"typeName": "Boolean"
对象中缺少 Value 和 DefaultValue 键,但仅当 value 设置为 false 时。当我将其设置为 true 时,在前端我得到了所有键和值:
"SomeBoolObject":
"value": true,
"defaultvalue": true,
"typename": "boolean"
在前端:
"SomeBoolObject":
"value": 1,
"defaultValue": 1,
"typeName": "Boolean"
这种行为的原因可能是什么?我是否需要编写一些自定义序列化程序来处理“假”值?
这有点类似于Json.net DefaultValueHandling exempting boolean alone
但建议的解决方案对我不起作用。
【问题讨论】:
您使用的是什么序列化程序? JSON.Net?或者也许是 ASP.Net Json 序列化器? 忘记添加 - Newtonsoft.JSON 【参考方案1】:解决方案:
var serializedJson = JsonConvert.SerializeObject (SomeBoolObject, new JsonSerializerSettings
DefaultValueHandling = DefaultValueHandling.Include
);
LIVE DEMO LINK
【讨论】:
试过这个,但没有运气。为我缺少的属性添加 [JsonProperty(Required = Required.Always)] 可以解决问题。【参考方案2】:我通过为属性添加一些属性来解决这个问题:
public class Element<T>
public Element(T value, T defaultValue, string name)
Value = value;
DefaultValue = defaultValue;
TypeName = name
[JsonProperty(Required = Required.Always)]
public T Value get; set;
[JsonProperty(Required = Required.Always)]
public T DefaultValue get; set;
public string TypeName get; set;
【讨论】:
提及有问题的 .NET/.NET Core Framework 和 Newtonsoft.Json 版本。以便其他人可能了解导致问题的原因。以上是关于JSON 序列化程序 - 当布尔值设置为 false 时,前端缺少键的主要内容,如果未能解决你的问题,请参考以下文章
如何让 NSJSONSerialization 将布尔值输出为真或假?
Swift 和 Alamofire - 访问条件语句的 JSON 值