gpt4 book ai didi

c# - 当 JSON 中缺少属性且不可为 null 时,如何抛出 JsonSerializationException?

转载 作者:行者123 更新时间:2023-11-30 12:19:30 25 4
gpt4 key购买 nike

当反序列化缺少属性的 JSON 字符串时,我的类中的这些属性会填充为它们的默认值。我想更改 JsonSerializerSettings,这样,如果 JSON 中缺少某个属性且类中的属性不可为空,则会引发异常。相反,当属性可为 null 时,则不是必需的。

我知道可以使用属性,但我想要一个通用设置。

JsonSerializerSettings settings = new JsonSerializerSettings();
MyParameters parms = JsonConvert.DeserializeObject<MyParameters>(json, settings);

例子:

public class MyParameters
{
public string Message1 { get; set; }
public string Message2 { get; set; }
public int MyInt { get; set; }
public int? MyNullableInt { get; set; }
}

以下 JSON 应该是可反序列化的:

{
"Message1": "A message",
"MyInt ": 1
}

结果:

Message1 = "A message"
Message2 = null
MyInt = 1
MyNullableInt = null

但以下 JSON 应该会导致异常,因为缺少 MyInt:

{
"Message1": "A message",
"MyNullableInt": 1
}

最佳答案

您可以使用自定义 ContractResolver做你想做的事:

class NonNullablePropertiesRequiredResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty prop = base.CreateProperty(member, memberSerialization);
Type propType = prop.PropertyType;
if (propType.IsValueType && !(propType.IsGenericType && propType.GetGenericTypeDefinition() == typeof(Nullable<>)))
{
prop.Required = Required.Always;
}
return prop;
}
}

在反序列化时将解析器应用于您的 JsonSerializerSettings:

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ContractResolver = new NonNullablePropertiesRequiredResolver();
MyParameters parms = JsonConvert.DeserializeObject<MyParameters>(json, settings);

工作演示:https://dotnetfiddle.net/t56U2a

关于c# - 当 JSON 中缺少属性且不可为 null 时,如何抛出 JsonSerializationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57673787/

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