2011-11-24 64 views
1

我的手上有一點問題,希望您可以幫忙。Silverlight中的XML序列化5

我一直在爲Silverlight 4中的客戶端開發Silverlight應用程序。然而,很明顯我需要有一個按鈕來允許全屏模式。這很好,很花哨,但是在全屏模式下,出於安全原因,Silverlight 4禁用了大部分鍵盤輸入.......所以全屏顯示將數據輸入到ChildWindowForms更容易的原因變得毫無意義。

我應該指出,由於不得不坐在Dynamics CRM 2011中以獲取它所處的上下文和記錄ID,因此我無法使該應用程序脫離瀏覽器。

因此開始我的forray變成silverlight 5.此版本允許應用程序在高級信任模式下在瀏覽器中運行。以前只能用作瀏覽器外模式。

全部都會很大,我已經想通了,我需要去籤我的代碼,添加一些註冊表項和用戶證書添加到受信任發佈者的證書,並得到它的工作。真棒。

我的問題出現了,當我試圖運行我的申請,有一個例外是這樣的:

There is an error in XML document (1, 41). ---> System.TypeAccessException: 
Attempt by security transparent method to access security critical type failed. 

在這一點上,所有的智慧改變了代碼是我已經使用證書籤名我的項目。

看來,在Silverlight 5它不「信任」我用了一些XML配置讀取和反序列化到.NET對象

一些挖似乎經過XmlSerializer對象那裏有一個新的串行在城裏做這個Silverlight 5,DataContractSerializer所以我認爲,非常好,我可以修改一些序列化代碼,一切都會好起來的。可悲的是,並非如此。

這個版本的Serializer似乎比這個版本快33%。它更快的原因是,XML中的所有節點都必須按字母順序排列。如果他們不是這個順序,他們被讀入爲空。 (如果他們碰巧處於正確的位置,他們會正確地讀入。)

所以我的問題是這樣的。 難道我沒有選擇,只能到我所有的XML配置文件重組爲字母順序,以適應這一新的Serialzer,或者是有使用舊的XML序列化,使Silverlight的5信任它呢?

回答

1

首先,DataContractSeriailiser對Silverlight 5來說並不陌生。

我相信,按字母順序排列的節點是默認的。 DataMemberAttribute你可以附加到每個屬性被序列化有Order屬性,你可以用它來指示他們出現的順序。

+0

所以Xml必須按照定義的順序,無論是否按字母順序排列?如果它們存在於這個層次上,它不能匹配節點嗎? – Chris

+0

@Chris:是的,這似乎是它的行爲方式。我創建了簡單的數據契約並將其應用於兩個相同的類,其中唯一的區別在於'DataMember'屬性上'Order'屬性的值。他們不會正確地互相操作。使'Order'值相互一致(不管實際的排序是什麼),並且一切正常。有趣的是,'DataContractJsonSerilizer'似乎沒有順序不匹配的問題(不是那對你有幫助)。 – AnthonyWJones

+0

感謝那安東尼,我想重新排序xml或定義合同成員訂單是我唯一的選擇。現在制定出長遠來看哪個更容易! – Chris