gpt4 book ai didi

c# - ContractData : returning a type of 'T' from the exception handler 的通用反序列化

转载 作者:太空宇宙 更新时间:2023-11-03 21:33:45 24 4
gpt4 key购买 nike

我可能无意中违反了设计模式。如果您好心地解释我做错了什么,我会改过自新。

我想编写一个通用的 json 反序列化器,它返回所提供类型的对象:

public T DeserializeContractData<T>(HttpContext context)
{
try
{

var obj = (T)new DataContractJsonSerializer(typeof(T)).ReadObject(context.Request.InputStream);
return obj;
}
catch (Exception ex)
{
return; // ????
}
}

如果反序列化失败,异常 block 应该返回什么?

最佳答案

简答:

return default(T)

不是那么简短的回答:

it depends :)

取决于返回 default 值(类为 null,结构为默认实例)是否适合您。

如果可以接受,那么我建议将您的方法命名为:DeserializeContractDataOrDefault - 它会让事情变得更加明显。

如果您不能接受(我同意@BlueM 的观点,一般 最好让调用者处理错误)- 那么最好:

  • 不处理异常,让调用者处理;
  • 处理异常(可选,记录它)并重新抛出它;
  • 处理异常(可选,记录它)重新抛出更详细的新异常解释和原著的内在;

我可以建议的另一种方法是添加一些智能逻辑来提供回退值。像这样的东西:

public T DeserializeContractData<T>(HttpContext context, Func<HttpContext, T> getFallbackValue = null)
{
try
{

var obj = (T)new DataContractJsonSerializer(typeof(T)).ReadObject(context.Request.InputStream);
return obj;
}
catch (Exception ex)
{
if(getFallbackValue == null)
{
throw;
}

return getFallbackValue(context);
}
}

调用者能够通过 getFallbackValue 提供任何逻辑,因此请明智地使用它。

关于c# - ContractData : returning a type of 'T' from the exception handler 的通用反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22923132/

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