当前位置: 首页 > 面试题库 >

可以查找Json.net中不存在的密钥

慕承恩
2023-03-14
问题内容

我有几种不同的格式,但是我不知道如何处理它们,因为当我尝试按键查找json.net崩溃时。我希望它只会返回null。

foreach (var item in jsonObj)
{
    var msg = item.Value["Msg"];
    if (msg != null)
    {
       txtErrors.Text += msg + Environment.NewLine;
    }
}

//格式化一个

{[UserNotFound, {
  "SeverityType": 3,
  "ValidationType": 2,
  "Msg": "Email Not Found"
}]}

我的代码有效。

//格式2(由于我没有在服务器端捕获异常而出现)

{
  "Message": "An error has occurred.",
  "ExceptionMessage": "Object reference not set to an instance of an object.",
  "ExceptionType": "System.NullReferenceException",
  "StackTrace": "  "
}

我当然可以解决此问题并捕获异常。但是,如果我再次忘记,我宁愿不要让它也崩溃。所以我很想只打印出“消息”,但我不知道该怎么做,因此它不会崩溃var msg = item.Value["Msg"];

我尝试做var时收到的错误 msg = item.Value["Msg"];

System.InvalidOperationException was unhandled
  Message=Cannot access child value on Newtonsoft.Json.Linq.JValue.
  StackTrace:
       at Newtonsoft.Json.Linq.JToken.get_Item(Object key)
       at Fitness.WindowsPhone7.UI.MainPage.<btnSignIn_Click>b__0(IRestResponse response)
       at RestSharp.RestClientExtensions.<>c__DisplayClass1.<ExecuteAsync>b__0(IRestResponse response, RestRequestAsyncHandle handle)
       at RestSharp.RestClient.ProcessResponse(IRestRequest request, HttpResponse httpResponse, RestRequestAsyncHandle asyncHandle, Action`2 callback)
       at RestSharp.RestClient.<>c__DisplayClass3.<ExecuteAsync>b__0(HttpResponse r)
       at RestSharp.RestClient.<>c__DisplayClass5.<>c__DisplayClass7.<ExecuteAsync>b__2(Object s)
       at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
       at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
       at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
       at System.Delegate.DynamicInvokeOne(Object[] args)
       at System.MulticastDelegate.DynamicInvokeImpl(Object[] args)
       at System.Delegate.DynamicInvoke(Object[] args)
       at System.Windows.Threading.DispatcherOperation.Invoke()
       at System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority)
       at System.Windows.Threading.Dispatcher.OnInvoke(Object context)
       at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args)
       at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args)
       at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)

问题答案:

假设您使用Newtonsoft.Json:

您可以使用JObject来测试是否存在属性:

JObject jObj; //initialized somewhere, perhaps in your foreach
var msgProperty = jObj.Property("msg");

//check if property exists
if (msgProperty != null) {
    var mag = msgProperty.Value;
} else {
    //there is no "msg" property, compensate somehow.
}


 类似资料:
  • 问题内容: 是否总是需要在HashMap中检查密钥是否存在? 我有一个说有1000个条目的HashMap,我正在考虑提高效率。如果HashMap的访问非常频繁,则每次访问时检查密钥是否存在将导致大量开销。相反,如果键不存在,因此发生异常,我可以捕获该异常。(当我知道这种情况很少发生时)。这将减少对HashMap的访问。 这可能不是一个好的编程习惯,但是它将帮助我减少访问次数。还是我在这里想念什么?

  • 问题内容: 基本上,我想要一个选择语句,其功能如下: 是否存在这样的条件,或者您如何在nvarchar(10)列中检查非整数? 问题答案: 在你可以这样做:

  • 问题内容: 我正在使用JSON.NET库。我创建了几个JObjects并将它们添加到JArray中。 现在,我想找到一个文本(JProperty)为的JObject 。如何通过使用JProperty在JArray中找到JObject。 问题答案: 您可以这样找到它: 这将找到第一个在有一个命名属性与值。如果不存在,则为null。

  • 问题内容: 在我的设置中,该命令向我显示以下内容: 我想找到没有到期日期的那三个键。我已经检查了文档无济于事。有任何想法吗? 问题答案: 从我现在找不到的网站修改。 编辑:注意,这是一个阻止呼叫。

  • 我试图找到电报的Api密钥,但我找不到它。我在网站上哪里可以找到它?如果我使用Api Id,我会在C#控制台应用程序中得到错误。

  • 假设我有一个带有一些可选属性的数据模型。例如,它可以是具有“firstname”、“lastname”和可选的“网站”属性的用户对象。 谢了。