簡體   English   中英

使用動態/匿名對象和JSON.NET

[英]Working with dynamic/anonymous objects and JSON.NET

.NET 4.0; VS 2010。

我們正在使用不提供WSDL的Web服務。 返回的數據並不是特別復雜,因此我們認為我們將使用動態/匿名類型。 這是從一種服務方法返回的JSON的示例(此字符串已通過JSONLint驗證):
[{“ value”:“ AAA”},{“ value”:“ BBB”},{“ value”:“ CCC”},{“ value”:“ DDD”},{“ value”:“ EEE”} ,{“ value”:“ FFF”}]

嘗試使用:

 dynamic respDyn = JsonConvert.DeserializeObject(jsonStringAbove);

在這種情況下,不會引發任何錯誤,但是在嘗試訪問resp變量時,Visual Studio調試器將報告“名稱'resp'在當前上下文中不存在”。

嘗試過LINQ:

var respLinq = JObject.Parse(jsonStringAbove);

這導致運行時錯誤: 從JsonReader讀取JObject時出錯 當前JsonReader項不是對象:StartArray。 路徑'',第1行,位置1。

發現本文根據JSON的格式建議了不同的解析方法:

if (jsonStringAbove.StartsWith("["))
{
   var arr = JArray.Parse(jsonStringAbove);
}
else
{
    var obj = JObject.Parse(jsonStringAbove);
}

var arr = JArray.Parse(jsonStringAbove); 命中后,調試器僅存在該方法並返回到調用過程。 沒有引發任何錯誤。 如果刪除了前方括號和后方方括號,則會遇到另一個運行時錯誤,類似於第二個示例中的結果。

所以。 不知道此時該轉向哪里。 似乎我們正在嘗試做的事情非常簡單,這讓我覺得我缺少明顯的東西。

不知道為什么,但是解決方案是將我的變量聲明為類中的字段。 我正在使用的方法本地的變量根本不起作用。 一旦聲明為類范圍的變量,該代碼將按預期方式運行。 很奇怪。 我懷疑這個問題可能是我的VS環境和/或解決方案配置所特有的,因為似乎其他任何人都沒有發生。 幸運的我。

暫無
暫無

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

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