【问题标题】:JObject how to read values in the array?JObject如何读取数组中的值?
【发布时间】:2013-02-17 12:43:21
【问题描述】:

这是json字符串:

{"d":[{"numberOfRowsAdded":"26723"}]}

string json = DAO.getUploadDataSummary();
JObject uploadData = JObject.Parse(json);
string array = (string)uploadData.SelectToken("d");

如何更改代码以读取“numberOfRowsAdded”中的值?

【问题讨论】:

    标签: c# json.net


    【解决方案1】:
    JObject uploadData = JObject.Parse(json);
    int rowsAdded = Convert.ToInt32((string)uploadData["d"][0]["numberOfRowsAdded"])
    

    【讨论】:

    • Nice,Newtonsoft.Json 的开发者。 1+
    【解决方案2】:

    你需要投到JArray:

    string json = "{\"d\":[{\"numberOfRowsAdded\":\"26723\"}]}";
    JObject parsed = JObject.Parse(json);
    JArray array = (JArray) parsed["d"];
    Console.WriteLine(array.Count);
    

    【讨论】:

    • 这是一种选择,但不需要强制转换为 JArray:uploadData["d"][0]["numberOfRowsAdded"]
    • @JamesNewton-King:出于某种原因,我读到这个问题是想知道数组中元素的 number ......而JArray 感觉就像最简单的方法。
    【解决方案3】:

    您可以将JObject 转换为dynamic 对象。
    您还可以将数组转换为 JArray 对象。

    JObject yourObject;
    //To access to the properties in "dot" notation use a dynamic object
    dynamic obj = yourObject;
    //Loop over the array
    foreach (dynamic item in obj.d) {
      var rows = (int)item.numberOfRowsAdded;
    }
    

    【讨论】:

      【解决方案4】:

      我尝试编写一个可以读取我的 json 字符串任何部分的通用方法。我在这个线程上尝试了很多答案,但它不适合我的需要。所以这就是我想出的。我在我的服务层使用以下方法从 json 字符串中读取我的配置属性。

      public T getValue<T>(string json,string jsonPropertyName)
      {                      
          var parsedResult= JObject.Parse(json);
      
          return parsedResult.SelectToken(jsonPropertyName).ToObject<T>();
      }
      

      这就是你将如何使用它:

      var result = service.getValue<List<string>>(json, "propertyName");
      

      因此,您可以使用它来获取 json 字符串中的特定属性并将其转换为您需要的任何内容。

      【讨论】:

        猜你喜欢
        • 2020-10-13
        • 1970-01-01
        • 1970-01-01
        • 2018-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-03
        • 2016-08-31
        相关资源
        最近更新 更多