我有几种不同的格式,但是我不知道如何处理它们,因为当我尝试按键查找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"];
我尝试做var时收到的错误 msg = item.Value["Msg"];
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. }