首先,我告诉我的DataSet如何通过xsd文件解释xml。问题的xml元素应该是KeyValuePair,我的xsd中的相应行看起来像
<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)。然后我用
加载xmlmyDataSet.ReadXml(new StringReader(myXmlString));
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,但究竟如何呢?感谢名单
答案 0 :(得分:0)
好吧,使用TypeConverters的猜测是完全错误的。 DataSet解析实现IXmlSerializable接口的所有内容。因此,使用通用的KeyValuePair,我实现了自己的一个,实现了IXmlSerializable接口。