亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當 JSON 中缺少屬性且不可為 null 時,如何拋出 JsonSerialization

當 JSON 中缺少屬性且不可為 null 時,如何拋出 JsonSerialization

C#
溫溫醬 2023-09-24 15:59:09
當反序列化缺少屬性的 JSON 字符串時,我的類中的這些屬性將使用其默認值進行填充。我想更改JsonSerializerSettings,以便如果 JSON 中缺少某個屬性并且該屬性在類中不可為空,則會引發異常。相反,當屬性可為空時,則不需要它。我知道屬性是可能的,但我想要一個通用設置。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 = nullMyInt = 1MyNullableInt = null但以下 JSON 應該會導致異常,因為MyInt缺少:{    "Message1": "A message",    "MyNullableInt": 1}
查看完整描述

1 回答

?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

您可以使用自定義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


查看完整回答
反對 回復 2023-09-24
  • 1 回答
  • 0 關注
  • 132 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號