C#獲取動態key的json對象的值

C#獲取動態key的json對象的值

問題描述

若是直接獲取某個json數組中的元素將獲得以下的jsonjson

{
    "44": {
        "height": 25,
        "appeared": -70000000,
        "length": 44,
        "order": "saurischia",
        "vanished": -70000000,
        "weight": 135000
    }
}

這個json對象若是使用C#類來反序列化,那麼實體類的結構以下,實體類的類名須要與json對象key相同的才能夠使用json反序列化,這樣對程序形成了極大的不便。數組

public class 44
{
    public int height { get; set; }
    public int appeared { get; set; }
    public int length { get; set; }
    public string order { get; set; }
    public int vanished { get; set; }
    public int weight { get; set; }
}

public class Root
{
    public 44 44 { get; set; }
}

解決方案

以上json對象因爲key是動態的沒法使用C#反序列化,可是直接取到value就能序列化了,以下。app

{
    "height":25,
    "appeared":-70000000,
    "length":44,
    "order":"saurischia",
    "vanished":-70000000,
    "weight":135000
}

以上json對象就能夠使用咱們經常使用的格式轉換了。函數

public class Root
{
    public int height { get; set; }
    public int appeared { get; set; }
    public int length { get; set; }
    public string order { get; set; }
    public int vanished { get; set; }
    public int weight { get; set; }
}

實現代碼

從動態key的json對象裏面拿到value那部分,能夠反序列化的字符串,請使用以下的函數,注意引入類庫。code

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Linq;
/// <summary>
/// 本類用於處理動態Key的json對象
/// </summary>
/// <param name="jObject">須要處理的json對象</param>
/// <returns>json對象的第一個元素的values</returns>
public static string GetJsonValue(string strJson)
{
    string strResult;
    JObject jo = JObject.Parse(strJson);
    string[] values = jo.Properties().Select(item => item.Value.ToString()).ToArray();
    if (values == null)
    {
        strResult = "";
    }
    else
    {
        strResult = values[0];
    }
    return strResult;
}
相關文章
相關標籤/搜索