我有一个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
但是提议的解决方案对我不起作用。
答案 0 :(得分:1)
解决方案:
var serializedJson = JsonConvert.SerializeObject (SomeBoolObject, new JsonSerializerSettings {
DefaultValueHandling = DefaultValueHandling.Include
});
答案 1 :(得分:0)
我通过为属性添加一些属性来解决该问题:
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;}
}