【问题标题】:VB deserialise DataSet from C# XMLVB 从 C# XML 反序列化 DataSet
【发布时间】:2013-11-08 11:09:03
【问题描述】:

以下代码引发 XML 反序列化错误 (20,2),我不知道为什么。 XmlSerialiser 是否有一些特殊的东西需要了解数据集的反序列化?

Dim strStringReader As StringReader = New StringReader(strValue)
Dim oXS As XmlSerializer = New XmlSerializer(strObjectType)
Deserialize = oXS.Deserialize(strStringReader)

这是 xml(在字符串 strValue 中可用):

<?xml version='1.0' encoding='utf-16'?>
<DataTable>
<xs:schema id='DocumentElement' xmlns='' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:msdata='urn:schemas-microsoft-com:xml-msdata'>
  <xs:element name='DocumentElement' msdata:IsDataSet='true' msdata:UseCurrentLocale='true'>
    <xs:complexType>
      <xs:choice minOccurs='0' maxOccurs='unbounded'>
        <xs:element name='tblCategoryLanguageElements'>
          <xs:complexType>
            <xs:sequence>
              <xs:element name='_LE_LanguageID' type='xs:string' minOccurs='0' />
              <xs:element name='_LE_FieldID' type='xs:string' minOccurs='0' />
              <xs:element name='_LE_Value' type='xs:string' minOccurs='0' />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' xmlns:diffgr='urn:schemas-microsoft-com:xml-diffgram-v1'>
  <DocumentElement>
    <tblCategoryLanguageElements diffgr:id='tblCategoryLanguageElements1' msdata:rowOrder='0' diffgr:hasChanges='inserted'>
      <_LE_LanguageID>1</_LE_LanguageID>
      <_LE_FieldID>1</_LE_FieldID>
      <_LE_Value>Components</_LE_Value>
    </tblCategoryLanguageElements>
    <tblCategoryLanguageElements diffgr:id='tblCategoryLanguageElements2' msdata:rowOrder='1' diffgr:hasChanges='inserted'>
      <_LE_LanguageID>1</_LE_LanguageID>
      <_LE_FieldID>2</_LE_FieldID>
      <_LE_Value>Imported by OT2KARTRISSync</_LE_Value>
    </tblCategoryLanguageElements>
    <tblCategoryLanguageElements diffgr:id='tblCategoryLanguageElements3' msdata:rowOrder='2' diffgr:hasChanges='inserted'>
      <_LE_LanguageID>1</_LE_LanguageID>
      <_LE_FieldID>3</_LE_FieldID>
      <_LE_Value />
    </tblCategoryLanguageElements>
    <tblCategoryLanguageElements diffgr:id='tblCategoryLanguageElements4' msdata:rowOrder='3' diffgr:hasChanges='inserted'>
      <_LE_LanguageID>1</_LE_LanguageID>
      <_LE_FieldID>4</_LE_FieldID>
      <_LE_Value />
    </tblCategoryLanguageElements>
    <tblCategoryLanguageElements diffgr:id='tblCategoryLanguageElements5' msdata:rowOrder='4' diffgr:hasChanges='inserted'>
      <_LE_LanguageID>1</_LE_LanguageID>
      <_LE_FieldID>5</_LE_FieldID>
      <_LE_Value />
    </tblCategoryLanguageElements>
    <tblCategoryLanguageElements diffgr:id='tblCategoryLanguageElements6' msdata:rowOrder='5' diffgr:hasChanges='inserted'>
      <_LE_LanguageID>1</_LE_LanguageID>
      <_LE_FieldID>8</_LE_FieldID>
      <_LE_Value />
    </tblCategoryLanguageElements>
  </DocumentElement>
</diffgr:diffgram>
</DataTable>

位置 (20,2) 是这样的:

<diffgr:diffgram xmlns:msdata='urn:sche...

任何帮助表示赞赏!

疯狂的应用程序

【问题讨论】:

  • 为什么标题里有c#?
  • 我正在从 C# 数据表中发送显示的 XML(用 c# 对其进行序列化并将其发送到 vb.net WebService)

标签: xml vb.net xmldocument xml-deserialization


【解决方案1】:

对于 DataSets 和 DataTables,writeread Xml 有特殊的方法。 DataSets 和 DataTables 可以通过多种方式进行序列化,因此存在一些重载。从您在问题中显示的 XML 中,我怀疑调用者将 DataTable 的 DiffGram 发送到您的 Web 服务,这是一种特殊格式,其中包含对 DataSet 或 DataTable 中的数据所做的更改。
您可以使用 ReadXml 重载之一读取 DiffGram。

【讨论】:

  • 谢谢。我将 c# 中的数据集序列化为 DiffGram 导致 VB WebService 想要这样。 WebService 在反序列化数据集时也需要一开始的模式。我不明白的是,为什么 VB XmlSerializer 在第 20 行第 2 列抛出 XML 反序列化错误? XML 看起来不错,是使用 writeXml vom dataSet 生成的。
  • XmlSerializer 使用的格式与 DataSet.WriteXml 使用的格式不同。我刚刚检查过,DataSet.ReadXml 将您的 XML 读取到 DataSet 中没有问题。我使用了一个无类型的 DataSet,并且能够查看 tblCategoryLanguageElements 表。
  • 也就是说,我需要用不同的序列化程序在 C# 中序列化 DataSet?我无法在服务器端更改 vb 代码。
  • 如果你不能改变服务器端,我希望你至少可以改变C#客户端。如果服务器无法处理序列化的 DataSet,请不要发送。而是以符合服务器预期格式的 XML 格式发送数据。也许您可以访问包含服务器使用的对象定义的 DLL,或者您需要构建一个序列化为服务器期望的 XML 的类结构。
  • 我现在在客户端的 c# 代码中使用 xmlserialiser 序列化数据集,它可以工作了!!谢谢大家。
猜你喜欢
  • 2013-06-25
  • 2020-02-18
  • 2011-05-12
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 2012-04-28
  • 1970-01-01
相关资源
最近更新 更多