gpt4 book ai didi

c# - 使用带有 ItemRequired = Required.Always 的 Json.Net 反序列化时忽略属性

转载 作者:可可西里 更新时间:2023-11-01 02:59:16 25 4
gpt4 key购买 nike

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

我添加到标有 [JsonObject(ItemRequired = Required.Always)] 的类中(或 Required.Always )一个新的只读属性。这导致以下 JsonSerializationException :

Newtonsoft.Json.JsonSerializationException: Required property '<PropertyName>' not found in 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);
}

最佳答案

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

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

因此,这是避免 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; }}
}

关于c# - 使用带有 ItemRequired = Required.Always 的 Json.Net 反序列化时忽略属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30984416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com