簡體   English   中英

將 JSON 對象/字符串轉換為 C# 動態對象並有權訪問屬性/值?

[英]Convert a JSON object/string to a C# dynamic object and have access to the properties/values?

我正在嘗試獲取一個巨大的 JSON 文件(可能是一個字符串),並且不知道我想要讀取的數據的實際結構,並將其作為 C# 中的類進行處理。 我嘗試使用 JSON 來反序列化它,但我不完全確定在那之后去哪里。 我正在考慮使用反射,但不確定我需要什么數據。

我試圖反序列化對象,如代碼所示。 但是我想測試它是否是正確的對象類型,因為它不是我希望它失敗,但我似乎無法通過這部分。 我也不知道如何處理支票內部的反射。 我知道我應該迭代但不確定對象內的哪些屬性值將包含我需要的內容。

string jsonData = sr.ReadToEnd();
dynamic data = JsonConvert.DeserializeObject(jsonData);
if (data is List<dynamic>)
{
    data.GetType().GetProperties();
}

我想要一個可以訪問來自 JSON 文件/字符串的數據的對象。

我認為您的問題之一是使用JArray而不是List,並且還需要將項目強制轉換為JObject。 使用Newtonsoft.Json和Newtonsoft.Json.Linq,然后您可以閱讀您的Json作為示例:

string __content = "[ {\"name\": \"person1\" , \"age\": 33} , {\"name\": \"person2\" , \"age\" : 23} ]";

        dynamic data = JsonConvert.DeserializeObject(__content);
        // make sure you have an array of object
        if (data is Newtonsoft.Json.Linq.JArray)
        {
            int i = 0;
            foreach (dynamic item in data)
            {
                // get the property of the object 
                JObject currentitem = item as JObject;
                if (currentitem != null)
                {
                    // access to value of each property
                    foreach (JProperty p in currentitem.Properties())
                    {
                        Console.WriteLine("[" + i + "] : " + p.Name + ":" + p.Value.ToString());
                    }
                    i++;
                }
            }
        }

您可以將DeserializeObject方法與通用類型一起使用。 為了確保您要轉換為Type。 這意味着您的代碼將如下所示:

var data = JsonConvert.DeserializeObject<T>(jsonData);

T是您要解析的類。 如果無法將Json字符串解析到您的類,則此方法將引發異常。 我想這就是你想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM