使用JArray从JSON中获取值

10

我有以下字符串(json格式)
我从我的服务器上获得了它:

{[{"ruta": "1","division": "7"},{"ruta": "2","division": "7"},{"ruta": "3","division":"7"},{"ruta": "4","division": "7"},{"ruta": "5","division": "7"},{"ruta": "23","division": "7"}]}

我想获取每个值并将它们保存在字符串变量中,以便将它们保存在数据库中。

为此,我正在尝试执行以下操作:

JArray jarr = JArray.Parse(result);
foreach (JObject content in jarr.Children<JObject>())
{
    foreach (JProperty prop in content.Properties())
    {
         string tempValue = prop.Value.ToString; // This is not allowed 
         //here more code in order to save in a database
    }
}

但我找不到将这些值转换为字符串的方法。

4个回答

7

使用ToString()而不是ToString

ToString()是一个方法调用;ToString是对ToString方法的引用,只能赋值给兼容的委托。

您也可以转换为String,因为JToken类定义了一个转换:

string tempValue = (string)prop.Value;

另一个可以考虑的选项是使用JSON序列化:创建一个代表JSON数据的类(具有相同的结构),并将JSON反序列化到该类。这使得代码更易读和可维护。


7

您可以使用C#类直接反序列化您的JSON(使用: http://json2csharp.com/),而不需要遍历Json。

public class YourClass
{
  public string ruta { get; set; }
  public string division { get; set; }
}

您可以进行反序列化操作。
List<YourClass> yourClasslist= JsonConvert.DeserializeObject<List<YourClass>>(result.ToString());

您可以这样做,因为您的Json是结构化格式。

1
那个网站真是太棒了!它救了我的命 :) - Patrick

5
JArray jarr = JArray.Parse(result);
foreach (JObject content in jarr.Children<JObject>())
{
    foreach (JProperty prop in content.Properties())
    {
         string tempValue = prop.Value.ToString(); // This is not allowed 
         //here more code in order to save in a database
    }
}

对于JSON,你应该从JObject开始,因为它被 { } 包围着,或者从你在问题中发布的JSON中删除它们。


1

JProperty.Value 是类型为 JToken 的对象,它有一个名为 ToString 的方法(而不是属性)。

请参见文档 此处

语法应该如下:

string tempValue = prop.Value.ToString();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接