2013-04-23 79 views
4

我正在使用Json動態對象C#Json動態對象

下面是我用來獲取數據出來的對象是什麼:

string = obj.item.today.price; 

這工作得很好,但問題是,一旦我開始使用數字例如:

string = obj.daily.10000; 

它給我一個錯誤

有什麼辦法解決這個問題嗎?

+0

請問您可以把代碼 – 2013-04-23 09:08:03

+1

命名爲一個變量:'var 1000 ='ABC';'??? – 2013-04-23 09:11:39

+2

JSON庫支持像obj.daily [「10000」]'這樣的索引語法並不罕見。你嘗試過嗎? – AlexanderBrevig 2013-04-23 09:14:21

回答

3

這是不可能的,因爲10000不是有效的identifiercall10000 on daily object」。

讓我解釋一下是怎麼回事:

JSON解析器產生一些運行時類型,從一些基本的JSON類型繼承(例如JsonObject)。 所以,obj是一些生成類型,你調用屬性item就可以了,它返回類似的生成類型,然後你調用today屬性等等。

最後一步很奇怪,不能有10000任何類型的屬性,生成或不生成。

但是,如果庫支持鍵值訪問對象,你可以嘗試寫

obj.daily["10000"] 

或投obj轉換爲JObject(假設你正在使用JSON.NET) 並調用Property方法:

var jsonObject = (JObject) obj; 
var propertyValue = jsonObject.Property("10000").Value; 
+0

是的,我嘗試obj.daily [「10000」],仍然給我標識符錯誤。 但是,如果所有名稱都是數字,那麼如何反序列化json代碼呢? – Tom 2013-04-23 09:20:54

+0

@Tom庫可以在反序列化的對象內維護內部字典並在那裏保存屬性。 – 2013-04-23 09:27:03

1

如果您在使用Json.NET

string json = "{ dayly : { 1000 : 'asd' } }"; 
dynamic d = JsonConvert.DeserializeObject(json); 
Console.WriteLine((d.dayly as JObject).Property("1000").Value);