簡體   English   中英

Json從JSON對象C#獲取數組對象

[英]Json get array object from JSON Object C#

我有這個json字符串傳遞給我的webapi

 string jsonstring = "{\"datamodel\": \"[{\"K1\":\"V1\",\"K2\":\"V2\"}]\"}";

我的(K,V)對中可能有更多。 我如何在C#中解析呢?

我以為我可以先將字符串轉換為JObject並從中獲取數據模型的密鑰,然后使用JArray解析K,V。 但它在這里的第一行代碼中引發jsonreader異常

JObject my_obj = JsonConvert.DeserializeObject<JObject>(jsonstring.ToString());

然后這樣做

 JObject data = my_obj["datamodel"].Value<JObject>();

首先,您要發布的JSON字符串無效。 根據您的評論,您可以使用以下代碼段清除方括號前后的引號:

string jsonstring = "{\"datamodel\": \"[{\"K1\":\"V1\",\"K2\":\"V2\"}]\"}";;
string jsonstringCleaned = jsonstring.Replace("\"[", "[").Replace("]\"", "]");
var my_obj = JsonConvert.DeserializeObject<JObject>(jsonstringCleaned);

該代碼是正確的,但是您得到的異常與JSON字符串的格式有關。 如果在此代碼中放入有效的JSON,則它應能按預期工作。

JSON字符串中的V1左右缺少\\“。看起來應該像這樣:

string jsonstring = "{\"datamodel\": \"[{\"K1\":\"V1\",\"K2\":\"V2\"}]\"}";

首先,始終確保您具有有效的Json字符串。 一種簡單的方法是將其粘貼到Json to C#轉換工具中,例如: http : //json2csharp.com/

如果可以選擇在Json字符串中使用單引號,可能會更簡單易讀,因為它避免了轉義雙引號的需要:

    string jsonstring = "{'datamodel': [{'K1':'V1','K2':'V2'}]}"

現在,我們反序列化對象並獲取JArray。 無需在JSON jsonstring字符串上調用ToString()。

   var my_obj = JsonConvert.DeserializeObject<JObject>(jsonstring);
   var data = (JArray)my_obj["datamodel"];

實現相同結果的更好,更簡潔的方法可能是只使用JObject.Parse。 我們只需一行代碼就可以完成相同的結果。

    var data = (JArray)JObject.Parse(jsonstring)["datamodel"];

暫無
暫無

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

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