在将Json.Net与ItemRequired = Required一起使用反序列化时,忽略属性

问题描述

显然JsonIgnore,在这种情况下,只能控制序列化。JsonIgnore需要指定该FullName属性不应序列化为json表示形式。

要在反序列化期间忽略该属性,我们需要添加JsonProperty带有的注释Required = Required.Default(这意味着不需要)。

因此,这是如何避免JsonSerializationException

[JsonObject(ItemRequired = Required.Always)]
public class Hamster
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    [JsonIgnore]
    [JsonProperty(Required = Required.Default)]
    public string FullName { get { return FirstName + LastName; }}
}

解决方法

我正在使用Json.Net将类序列化和反序列化为json并返回。

我在标有[JsonObject(ItemRequired = Required.Always)](或Required.Always)新的仅获取属性的类中添加了代码。结果如下JsonSerializationException

Newtonsoft.Json.JsonSerializationException:'<PropertyName>'在JSON中找不到必需的属性

我以为标记该属性JsonIgnore可以解决此问题,但这不起作用。

我如何告诉Json.Net应该忽略此属性?

这是重现此问题的最小示例:

[JsonObject(ItemRequired = Required.Always)]
public class Hamster
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    [JsonIgnore]
    public string FullName { get { return FirstName + LastName; }}
}

private static void Main()
{
    var hamster = new Hamster {FirstName = "Bar",LastName = "Arnon"};
    var serializeObject = JsonConvert.SerializeObject(hamster);
    var deserializeObject = JsonConvert.DeserializeObject<Hamster>(serializeObject);
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...