序列化含异常抛出属性的对象至JSON时遇抛出异常问题求助
问题原因
JsonConvert(Newtonsoft.Json)在序列化对象时,会尝试读取所有公共可访问属性的取值。你的Value是一个计算属性,当IsSuccess=false时,访问它的get方法会直接抛出异常——序列化器读取这个属性时触发了异常,导致序列化过程直接中断,根本没机会生成包含异常信息的JSON。
解决办法
有几种适配场景的处理方式:
- 条件序列化:给
Result类添加一个ShouldSerializeValue方法,让序列化器只在成功状态下才读取Value属性:
Newtonsoft.Json会自动识别这个命名格式的方法,当方法返回public bool ShouldSerializeValue() { return IsSuccess; }false时跳过对应属性的序列化,避免触发异常。 - 标记属性按需忽略:如果失败状态下完全不需要
Value字段,也可以用[JsonIgnore]标记该属性,但这会导致成功状态下也无法序列化Value,仅适用于特定场景。 - 修改属性逻辑:把
Value属性改为失败时返回default(TValue)而非抛出异常,不过这会改变原有业务逻辑,需要结合实际需求评估。 - 自定义JSON转换器:编写针对
Result<TValue>的自定义转换器,手动控制序列化逻辑:成功时写入Value,失败时跳过或写入错误描述。
核心逻辑补充
序列化器的工作机制是遍历对象的公共成员并执行其取值逻辑,对于计算属性会直接运行get访问器代码。你的Value属性在失败状态下的get逻辑直接抛出异常,这个异常会终止序列化流程,因此不会生成任何JSON输出。
内容的提问来源于stack exchange,提问作者Wojciech Szabowicz
相关产品推荐
相关产品推荐

