C# 条件TryGetValue抛出“对象引用未设置为对象的实例”。异常
我在MVC.NET应用程序中有一个web方法,它接受来自AJAX调用的json数据字符串,并在数据库中进行更新 数据是一个对象数组,可以是两种包类型之一。我检查它是哪种包类型,然后将字符串反序列化到该类。所以函数看起来像这样:C# 条件TryGetValue抛出“对象引用未设置为对象的实例”。异常,c#,asp.net-mvc-4,exception,C#,Asp.net Mvc 4,Exception,我在MVC.NET应用程序中有一个web方法,它接受来自AJAX调用的json数据字符串,并在数据库中进行更新 数据是一个对象数组,可以是两种包类型之一。我检查它是哪种包类型,然后将字符串反序列化到该类。所以函数看起来像这样: public JsonResult SaveData (string jsonIn) { string rtnStr = ""; bool hasChanges = false; using (var db
public JsonResult SaveData (string jsonIn)
{
string rtnStr = "";
bool hasChanges = false;
using (var db = new MyDBContext())
{
JArray packages = JArray.Parse(jsonIn);
foreach (JObject package in packages.Children<JObject>())
{
string packageType = "Unknown";
if (package != null & package.TryGetValue("DataType", out JToken value))
{
packageType = value.ToString();
}
if (packageType == "PackageTypeA")
{
PackageTypeA pkgTypeA = JsonConvert.DeserializeObject<PackageTypeA>(package.ToString());
//do some things
}
else if (packageType == "PackageTypeB") {
PackageTypeB pkgTypeB = JsonConvert.DeserializeObject<PackageTypeB>(package.ToString());
//do something else
}
}
}
}
作为一个布尔方法,不应该package.TryGetValueDataType,out JToken value等于false,这样packageType=value.ToString;如果数据类型为null,则不执行此操作?程序包!=空文件包(&P)。。。。这是你的问题。
包为null,但您尝试访问它的TryGetValue方法
相反,请使用&&:
或者更好——好吧,更短,至少:
if (package?.TryGetValue("DataType", out JToken value) ?? false)
我认为如果包!=null&package.TryGetValueDataType,out JToken值,而不是下一行(如果是这种情况),但我认为&而不是&&也是一个问题。ThanksIt将从此行中抛出…异常的stacktrace表明情况并非如此
if (package != null && package.TryGetValue("DataType", out JToken value))
if (package?.TryGetValue("DataType", out JToken value) ?? false)