C# 它以递归方式通过jsondocument创建
我需要遍历Jsondocument,并根据遇到的JsonValueKind执行某种检查 我试图以这种方式进行验证检查C# 它以递归方式通过jsondocument创建,c#,system.text.json,C#,System.text.json,我需要遍历Jsondocument,并根据遇到的JsonValueKind执行某种检查 我试图以这种方式进行验证检查 public bool Dec(JsonElement Element) { var ElementEnumeratable = Element.EnumerateObject(); foreach (var Elm in ElementEnumeratable ) { string name = Elm.Name; s
public bool Dec(JsonElement Element)
{
var ElementEnumeratable = Element.EnumerateObject();
foreach (var Elm in ElementEnumeratable )
{
string name = Elm.Name;
switch (Elm.Value.ValueKind)
{
case JsonValueKind.Array:
var jArray = Elm.Value;
return Dec(jArray);
case JsonValueKind.String:
string jString = Elm.Value.GetString();
break;
case JsonValueKind.Number:
int jNumber = Elm.Value.GetInt32();
break;
}
}
return true;
}
这里的问题是当Elm
具有ValueKind
数组时-我无法将其传递给Dec
似乎将valuekind作为数组的JsonElement无法转换为EnumerateObject
在这里怎么办?我认为你在错误的地方切换。如果使用数组调用
Dec()
,它仍将调用EnumerateObject()
。它需要为数组调用EnumerateArray()
。我认为您在错误的位置进行了切换。如果使用数组调用Dec()
,它仍将调用EnumerateObject()
。它需要为数组调用EnumerateArray()
。据我所知,如果ValueKind
是JsonValueKind.array
,那么您需要使用迭代数组,这样您将拥有jeelement
并为每个元素调用Dec
来验证它们,如下所示:
public static bool Dec(JsonElement Element)
{
var ElementEnumeratable = Element.EnumerateObject();
foreach (var Elm in ElementEnumeratable)
{
string name = Elm.Name;
switch (Elm.Value.ValueKind)
{
case JsonValueKind.Array:
var jArray = Elm.Value;
foreach (var item in jArray.EnumerateArray())
{
Dec(item);
}
break;
case JsonValueKind.String:
string jString = Elm.Value.GetString();
break;
case JsonValueKind.Number:
int jNumber = Elm.Value.GetInt32();
break;
}
}
return true;
}
据我所知,如果
ValueKind
是JsonValueKind.Array
,那么您需要使用迭代数组,这样您将拥有jeelement
并调用每个元素的Dec
来验证它们,如下所示:
public static bool Dec(JsonElement Element)
{
var ElementEnumeratable = Element.EnumerateObject();
foreach (var Elm in ElementEnumeratable)
{
string name = Elm.Name;
switch (Elm.Value.ValueKind)
{
case JsonValueKind.Array:
var jArray = Elm.Value;
foreach (var item in jArray.EnumerateArray())
{
Dec(item);
}
break;
case JsonValueKind.String:
string jString = Elm.Value.GetString();
break;
case JsonValueKind.Number:
int jNumber = Elm.Value.GetInt32();
break;
}
}
return true;
}
你想在这里实现什么?您的
Dec
方法需要JsonElement
类型的参数,但您正在发送Array
。我想对字符串和数字进行一些验证,但有时我会得到一个数组=>在这种情况下,我需要遍历它,并对字符串和数字执行检查…@kafka-My对您前面的问题显示了一个你想在这里实现什么?您的Dec
方法需要JsonElement
类型的参数,但您正在发送Array
。我想对字符串和数字进行一些验证,但有时我会得到一个数组=>在这种情况下,我需要遍历它,并对字符串和数字执行检查…@kafka-My对您前面的问题显示了一个如果您在数组中有数组,那么这个示例代码将发出尖锐的声音(因为随后的递归调用将抛出EnumerateObject
)。Dec
的实现应该预先检查它是对象还是数组,并基于ValueKind
调用正确的枚举器,而不是假设输入始终是JSON对象。如果数组中有数组,则此示例代码会发出尖锐的声音(因为随后的递归调用将抛出EnumerateObject
)。Dec
的实现应该预先检查它是对象还是数组,并基于ValueKind
调用正确的枚举器,而不是假设输入始终是JSON对象。