使用JArray从JSON获取值

时间:2014-04-15 22:13:15

标签: c# json windows-phone-8

我有以下字符串(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 个答案:

答案 0 :(得分:7)

使用ToString(),而不是ToString

ToString()是方法调用; ToString是对ToString方法的引用,只能分配给兼容的委托。

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

string tempValue = (string)prop.Value;

要考虑的另一个选择是使用JSON序列化:创建一个表示JSON数据的类(具有相同的结构),并将JSON反序列化到此类。它使代码更具可读性和可维护性。

答案 1 :(得分:6)

您可以使用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是结构化格式

答案 2 :(得分:4)

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周围删除它们

答案 3 :(得分:1)

JProperty.Value的类型为JToken,其方法为ToString(而非属性)。

请参阅文档here

语法应该是这样的:

string tempValue = prop.Value.ToString();