如果你有一個JSON字符串,只是想檢查任何屬性值或數組項目是否null
,你可以解析到JToken
遞歸下降JToken
層次結構與JContainer.DescendantsAndSelf()
,並檢查每個JValue
爲null
使用以下擴展方法:
public static partial class JsonExtensions
{
public static bool AnyNull(this JToken rootNode)
{
if (rootNode == null)
return true;
// You might consider using some of the other checks from JsonExtensions.IsNullOrEmpty()
// from https://stackoverflow.com/questions/24066400/checking-for-empty-null-jtoken-in-a-jobject
return rootNode.DescendantsAndSelf()
.OfType<JValue>()
.Any(n => n.Type == JTokenType.Null);
}
public static IEnumerable<JToken> DescendantsAndSelf(this JToken rootNode)
{
if (rootNode == null)
return Enumerable.Empty<JToken>();
var container = rootNode as JContainer;
if (container != null)
return container.DescendantsAndSelf();
else
return new[] { rootNode };
}
}
然後執行:
var root = JToken.Parse(jsonString);
var anyNull = root.AnyNull();
如果你只是想檢查空屬性值(即數組中的空值都可以)您可以使用以下擴展方法:
public static partial class JsonExtensions
{
public static bool AnyNullPropertyValues(this JToken rootNode)
{
if (rootNode == null)
return true;
return rootNode.DescendantsAndSelf()
.OfType<JProperty>()
.Any(p => p.Value == null || p.Value.Type == JTokenType.Null);
}
}
(從您的問題中不完全清楚您想要什麼。)
樣品.Net fiddle。
來源
2017-10-20 18:47:11
dbc
您可以使用[Json.NET需要反序列化的所有屬性](https://stackoverflow.com/a/29660550/3744182)中的RequireObjectPropertiesContractResolver。從你的問題來看,你是否想[[Required.Always'或'Required.AllowNull'](https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Required.htm)還不清楚。 – dbc
我需要'Required.Always'。所以它在反序列化時檢查?它也適用於兒童嗎? – Venky
反正有沒有反序列化json來達到相同的結果? – Venky