使用带有 ItemRequired = Required.Always 的 Json.Net 反序列化时忽略属性
Posted
技术标签:
【中文标题】使用带有 ItemRequired = Required.Always 的 Json.Net 反序列化时忽略属性【英文标题】:Ignore a property when deserializing using Json.Net with ItemRequired = Required.Always 【发布时间】:2015-06-22 15:51:12 【问题描述】:我正在使用 Json.Net 将类序列化和反序列化为 json 并返回。
我向标有[JsonObject(ItemRequired = Required.Always)]
(或Required.Always
)的类添加了一个新的仅获取属性。这导致以下JsonSerializationException
:
Newtonsoft.Json.JsonSerializationException:在 JSON 中找不到必需的属性
'<PropertyName>'
我认为用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);
【问题讨论】:
【参考方案1】:显然JsonIgnore
在这种情况下只会控制序列化。需要JsonIgnore
来指定FullName
属性不应序列化为json 表示形式。
要在反序列化期间忽略该属性,我们需要添加带有Required = Required.Default
的JsonProperty
注释(这意味着不需要)。
所以,这是避免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(.net core 5)中没有JsonPropertyAttribute? @nAviD 有。刚检查。我假设您实际上并没有使用 Json.NET。以上是关于使用带有 ItemRequired = Required.Always 的 Json.Net 反序列化时忽略属性的主要内容,如果未能解决你的问题,请参考以下文章
Cannot convert value of type ‘java.lang.String‘ to requi
Java.报错:The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from requi
config : 'option forwardfor' ignored for frontend 'openshift-api-server' as it requi
pkg_resources.DistributionNotFound: The 'pip==7.1.0' distribution was not found and is requi