C# 检查字符串是否出现在值列表中

C# 检查字符串是否出现在值列表中,c#,json,C#,Json,我有一些JSON,我检查并解析成JArray。JSON与此类似: "required" : [ "1", "2" ] 现在,当它解析时,结果是一个jvalue数组。我想检查我的字符串是否出现在此列表中。因此,要做到这一点,我必须: JArray requiredArray = JArray.Parse(myJson["required].ToString()); bool exists = requiredArray.Contains("1"); 这返回为false,我认为这是因为它将JV

我有一些JSON,我检查并解析成JArray。JSON与此类似:

"required" : [ "1", "2" ]
现在,当它解析时,结果是一个jvalue数组。我想检查我的字符串是否出现在此列表中。因此,要做到这一点,我必须:

JArray requiredArray = JArray.Parse(myJson["required].ToString());

bool exists = requiredArray.Contains("1");
这返回为false,我认为这是因为它将JValue与字符串进行比较。我尝试将字符串转换为JValue,如下所示:

JValue itemValue = JValue.Parse("1");
它不喜欢这样,说不能将JToken转换为JValue


我需要知道的是,我的JArray是否包含此字符串值。

您可以使用
任意

bool exists = requiredArray.Any(t => t.Value<string>() == "1");
bool exists=requiredArray.Any(t=>t.Value()=“1”);

您可以将JArray转换为字符串数组,这样您就可以像最初希望的那样执行.Contains():

string[] strings = requiredArray.ToObject<string[]>();

bool exists = strings.Contains("1");
string[]strings=requiredArray.ToObject();
bool exists=strings.Contains(“1”);
.Contains()
在这种情况下不起作用,因为如中所述,
JArray
s比较引用而不是实际值。(这也是为了回答Patrick在回答中的评论。)

你可以这样做:

publicstaticbool包含字符串(这个JArray,字符串s)
{
返回jArray.Any(x=>x.ToString().Equals);
}
并像这样使用它:

if(requiredArray.containssString(“1”)){
//...
}

完美。这正是我所需要的,一种解析任意一方的方法,使它们具有相同的类型进行比较。非常感谢。当它可用时将接受不要问我为什么它在您的示例代码中不起作用,我认为应该可以。也许JSON.NET内部的一些东西我们还不太了解。