2011-10-21 19 views
6

我使用SimpleJson庫從這裏:http://simplejson.codeplex.com/淨SimpleJson:反序列化JSON動態對象

我想JSON字符串反序列化到一個動態對象是這樣的:

dynamic json = SimpleJson.SimpleJson.DeserializeObject("{\"foo\":\"bar\"}"); 

var test = json.foo; 

反序列化部分工作正常,但調用json.foo會拋出RuntimeBinderException,並顯示錯誤消息'SimpleJson.JsonObject' does not contain a definition for 'foo'

如何使用SimpleJson反序列化JSON字符串並使用json.foo語法訪問動態屬性?

回答

9

嗯,這只是閱讀SimpleJson的源代碼的問題。 :-)一條線需要取消註釋以支持我正在尋找的動態語法。不知道爲什麼這不是默認啓用。

從源代碼:

// NOTE: uncomment the following line to enable dynamic support. 
//#define SIMPLE_JSON_DYNAMIC 
+2

這是一個公平的評論,L.B.我無法刪除該問題,因此希望這可以成爲其他人通過NuGet安裝SimpleJson並遇到與我一樣的問題的有用工具。 –

+1

+1對我有幫助。 –

2

查看樣本,JsonObject屬性像字典一樣訪問。因此,而不是json.foo,您將需要json["foo"]

在這裏你實際上使用dynamic更糟糕,因爲沒有什麼動態的:該方法返回JsonObject,它根本沒有foo成員。如果您沒有使用dynamic,則可能在編譯時收到該錯誤消息。

如果你看看鏈接L.B.提供,它顯示瞭如何自己實現這個動態功能。

1

> CSC/T:庫/ d:SIMPLE_JSON_DYNAMIC SimpleJson.cs