【问题标题】:How does a DataSet know how to parse elements from xml files?DataSet 如何知道如何解析 xml 文件中的元素?
【发布时间】:2011-05-26 17:12:36
【问题描述】:

首先,我告诉我的数据集如何通过 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)。然后我用

加载xml
myDataSet.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,但究竟如何?谢谢

【问题讨论】:

  • 您如何看待/喜欢将 K-V 对编码到数据库中?
  • 暂时没关系。 .NET 中的 ToString 方法会生成“[key, value]”,所以我可能会在我的 TSQL 中将这样的字符串拼接在一起,但如果我只将键放入我的 xml 和一些额外的 xml,那就更好了描述字典以映射此类对的元素。该应用程序是我将一个表映射到一个 DataGrid 并且外键显示为 Combobox 以供选择。在这个组合框中,我想显示一个可读的描述,而不是 guid...

标签: c# xml xsd dataset


【解决方案1】:
好的,猜测使用typeconverters完全错误。 DataSet解析实现IXMLSerializable接口的所有内容。因此,使用通用keyValuepair,我实现了自己的键,它实现了IXMLSerializable接口。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 2022-11-24
    相关资源
    最近更新 更多