2010-12-16 56 views
1

首先,我告訴我的DataSet如何通過xsd文件來解釋xml。問題的XML元素應該是一個KeyValuePair,在我的xsd的corrosponding行看起來像DataSet如何知道如何解析xml文件中的元素?

<xs:element name="MyKeyValuePair" msdata:DataType="System.Collections.Generic.KeyValuePair`2[[System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:anyType" /> 

的XSD加載到DataSet如下:

myDataSet.ReadXmlSchema(new StringReader(myXsdString)); 

這工作得很好,我可以檢查在調試器中,列的DataType是正確的(我有一些字符串,一些雙打,一些System.Guid等,當然 - 我的KeyValuePair)。然後,我

myDataSet.ReadXml(new StringReader(myXmlString)); 

的XML看起來加載XML這樣的

<DataSet> 
    <DataTable> 
    <MyGuid>8F6FC345-5362-4518-B652-0CC3AD54901E</MyGuid> 
    <MyKeyValuePair>[67b7fdd1-2079-4311-a7a3-cd2fb0b31384, myValue]</MyKeyValuePair> 
    <MyBool>0</MyBool> 
    </DataTable> 
</DataSet> 

所有類型的正確分析,但顯然在DataSet不知道如何解析通用KeyValuePair。如何告訴DataGrid如何解析特定的類型?我的猜測是以某種方式使用TypeConverters,但究竟如何? Thanx

+1

您如何認爲/想要將K-V對編碼到數據庫中? – 2010-12-16 18:11:46

+0

那暫時不重要。在.NET中的ToString方法會產生「[key,value]」,所以我可能會在TSQL中將這樣的字符串拼接在一起,但它會更好,如果我只把鍵放入我的xml和一些額外的xml描述字典映射這些對的元素。 該應用程序是我將一張表映射到DataGrid,並將外鍵顯示爲Combobox以供選擇。在這個Combobox中,我想顯示一個可讀的描述,而不是guid ... – 2010-12-17 08:38:24

回答

0

好的,使用TypeConverters的猜測是完全錯誤的。 DataSet解析實現IXmlSerializable接口的所有內容。所以改爲使用通用KeyValuePair,我實現了我自己的一個,它實現了IXmlSerializable接口。