2016-01-23 14 views
0

使用DataContractSerializer序列化具有多個IDictionary成員的對象。序列化的數據有一堆名稱空間添加到它,如d2p1,d3p1等我試圖使用xsl來轉換序列化的數據閱讀,但我不知道如何創建這些命名空間時的xsl規則就像它們是動態生成的。DataContractSerializer和Dictionary以及XSL

是否有最佳實踐方式來處理這與xsl或有沒有一種方法來序列化它沒有這些額外的名稱空間?

序列化的數據看起來像這樣

<Attributes xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
<d2p1:KeyValueOfstringanyType> 
    <d2p1:Key>name</d2p1:Key> 
    <d2p1:Value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:string">Test object</d2p1:Value> 
</d2p1:KeyValueOfstringanyType> 
<d2p1:KeyValueOfstringanyType> 
    <d2p1:Key>x</d2p1:Key> 
    <d2p1:Value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:double">0.5</d2p1:Value> 
</d2p1:KeyValueOfstringanyType> 
<d2p1:KeyValueOfstringanyType> 
    <d2p1:Key>y</d2p1:Key> 
    <d2p1:Value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:double">1.25</d2p1:Value> 
</d2p1:KeyValueOfstringanyType> 
<d2p1:KeyValueOfstringanyType> 
    <d2p1:Key>age</d2p1:Key> 
    <d2p1:Value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:int">4</d2p1:Value> 
</d2p1:KeyValueOfstringanyType> 
<d2p1:KeyValueOfstringanyType> 
    <d2p1:Key>list-of-strings</d2p1:Key> 
    <d2p1:Value> 
     <d2p1:string>one string</d2p1:string> 
     <d2p1:string>two string</d2p1:string> 
     <d2p1:string>last string</d2p1:string> 
    </d2p1:Value> 
</d2p1:KeyValueOfstringanyType> 

+0

糾正我,如果我錯了,但它看起來像這些名稱空間生成時,它不知道名稱空間。在這種情況下,它是字典。如果我定義自己的類來實現IDictionary與數據契約,那麼它會知道命名空間? –

+1

似乎只有名稱空間**前綴**是動態的,名稱空間** URI **看起來穩定且規則。您不需要知道使用XSLT處理XML文檔的前綴。如果您在這裏要求提供XSLT解決方案:請清楚輸入XML文檔的內容,顯示您期望的XML輸出並解釋轉換規則。不要認爲知道XSLT的人也知道C#和WCF。幫助:http://stackoverflow.com/help/mcve。 –

回答

0

使用空間URI由馬蒂亞斯·穆勒的建議工作。

相關問題