2012-04-28 55 views
1

我一直在尋找解析JSON字符串的方法,並且遇到了這兩種方法。在C中鑄造vs指定類型#

class Test { 

     String test; 

     String getTest() { return test; } 
     String setTest(String test) { test = test; } 

    } 

var ser = new JavaScriptSerializer(); 
Test abc = (Test)ser.DeserializeObject("{ \"test\":\"some data\" }"); 

var ser = new JavaScriptSerializer(); 
Test abc = ser.Deserialize<Test>("{ \"test\":\"some data\" }"); 

第一個是鑄造一個目的是一種類型的,而第二個被指定類型?他們之間有任何真正的區別一種方法更可取嗎?

回答

3

第二個選項(使用通用Deserialize<T>方法)對於您的特定示例更可取,因爲您期望使用特定類型。

當輸入不代表您期望的類型的對象時,兩者都會產生稍微不同的結果。在第一種情況下,在您的轉換中會出現InvalidCastException,而在第二種情況下,Deserialize方法會引發InvalidOperationException。但除此之外,存在性能等方面實際上沒有差別the documentation for Deserialize<T>狀態這樣的:

的反序列化方法等效於第一使用DeserializeObject方法來獲得一個對象圖,然後試圖把結果到T型。

3

不,第一個目的的唯一目的是讓您執行反序列化,即使您不確定結果類型。 (第二個爲你自動執行演員)但是沒有實質性的區別。 (從字面上看,唯一的區別是後者自動拋出前者的結果)