如何在JSON数组中获取项的值c#?

mklgxw1f  于 2023-01-14  发布在  C#
关注(0)|答案(4)|浏览(173)

所以,请阅读此详细信息以获取更多信息。当我尝试获取数组项的值时,在Method not found: 'System.String System.String.Format(System.IFormatProvider, System.String, System.Object)'.处出现错误。
该数组为:

{
    [
        {
            "GROUP_MOD_ID": "G06",
            "ADMIN": 1,
            "USERS": 0
        }
     ]
}

这是代码片段

dynamic obj_str = JsonConvert.DeserializeObject(obj);
                string value_admin = obj_str["ADMIN"];
                Console.WriteLine(value_admin);       
                if (value_admin == "1")
                    return true;
                else
                    return false;

谢谢大家

fxnxkyjh

fxnxkyjh1#

在这种情况下,我不会使用dynamic,我通常建议在C#中避免使用dynamic,相反,我更喜欢JToken风格的方法(在Newtonsoft.Json.Linq命名空间中,尽管这并不意味着必须使用Linq):

JArray array = JArray.Parse( input );
JObject firstObject = (JObject)array.First;
String adminValue = (String)firstObject.GetValue("ADMIN");

在生产环境中,您需要添加输入验证代码,以确保输入JSON数组和对象实际上具有元素和值,并相应地处理这些错误。
但是如果你确信输入是正确的,你可以把它简化为一行:

String adminValue = (String)( ((JObject)JArray.Parse( input )).First.GetValue("ADMIN") );

......当然是以可读性为代价的。

kg7wmglp

kg7wmglp2#

首先,您的JSON似乎不正确。
正确的JSON:

[{
"GROUP_MOD_ID": "G06",
"ADMIN": 1,
"USERS": 0
}]

当你去设计这个json的时候,它会给予你数组的数组。
您的代码将是:

dynamic obj_str = JsonConvert.DeserializeObject(json);
    string value_admin = obj_str[0].ADMIN;
    Console.WriteLine(value_admin);
    if (value_admin == "1")
    {
    }
    else
    {
    }

通过这样做,你可以看到这一点。

public class SampleClass
{
    public string GROUP_MOD_ID { get; set; }
    public int ADMIN { get; set; }
    public int USERS { get; set; }
}

要反序列化的代码:

SampleClass[] obj_str = JsonConvert.DeserializeObject<SampleClass[]>(json);
    int value_admin = obj_str[0].ADMIN;
    Console.WriteLine(value_admin);
    if (value_admin == 1)
    {
    }
    else
    {
    }
ijxebb2r

ijxebb2r3#

您的代码只有在将json作为
变量对象="{'组模块标识':'G 06','管理员':10,'用户':0}";

var obj="[{'GROUP_MOD_ID':'G06','ADMIN':1,'USERS':0}]";

    dynamic obj_str = JsonConvert.DeserializeObject(obj);
            string value_admin = obj_str[0]["ADMIN"];
            Console.WriteLine(value_admin);
shyt4zoc

shyt4zoc4#

嗨,首先你们要为反序列化对象建模。
你的模特像这样。

public class Test_Model
{
    [JsonProperty("GROUP_MOD_ID")]
    public string GROUP_MOD_ID { get; set; }
    [JsonProperty("ADMIN")]
    public int ADMIN { get; set; }
    [JsonProperty("USERS")]
    public int USERS { get; set; }
}

在写好这段代码之后

var obj_str = JsonConvert.DeserializeObject<Test_Model>(obj);
        int value_admin = obj_str.ADMIN;
        Console.WriteLine(value_admin);
        if (value_admin == 1)
            return true;
        else return false;

我希望你的问题解决了。

相关问题