2010-12-16 62 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接口。