DataSet如何知道如何解析xml文件中的元素?
问题描述:
首先,我告诉我的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
答
好的,使用TypeConverters的猜测是完全错误的。 DataSet解析实现IXmlSerializable接口的所有内容。所以改为使用通用KeyValuePair,我实现了我自己的一个,它实现了IXmlSerializable接口。
您如何认为/想要将K-V对编码到数据库中? – 2010-12-16 18:11:46
那暂时不重要。在.NET中的ToString方法会产生“[key,value]”,所以我可能会在TSQL中将这样的字符串拼接在一起,但它会更好,如果我只把键放入我的xml和一些额外的xml描述字典映射这些对的元素。 该应用程序是我将一张表映射到DataGrid,并将外键显示为Combobox以供选择。在这个Combobox中,我想显示一个可读的描述,而不是guid ... – 2010-12-17 08:38:24