【问题标题】:Dataset deserialization to object issue - vb .net数据集反序列化到对象问题 - vb .net
【发布时间】:2020-02-10 11:06:18
【问题描述】:

大家好,我在将数据集(带有父表)反序列化为对应对象时遇到了一些问题。 每个表都有其父对象内的数组对象以进行反序列化,每个数组都有默认{},但如果父表没有行,则内部对象设置为空,而不是空数组......我该如何纠正这个问题?!?

非常感谢大家。

VB .Net 代码:

Public Function DeserializeDataSetToObj(ByRef DataSetIn As DataSet, ByVal t As Type) As Object
        Dim obj As Object = Nothing
        Dim stream As MemoryStream = New MemoryStream()

        Using writer As XmlWriter = XmlWriter.Create(stream)
            DataSetIn.WriteXml(writer)
        End Using

        stream.Seek(0, SeekOrigin.Begin)

        Using reader As XmlReader = XmlReader.Create(stream)
            Try
                Dim xmlSer As System.Xml.Serialization.XmlSerializer = New System.Xml.Serialization.XmlSerializer(t)
                obj = xmlSer.Deserialize(reader)
            Catch ex As Exception

            End Try
        End Using

        Return obj
    End Function

对象类

<Serializable(), XmlRoot("MainDataset"), XmlType("MainDataset")>
Public Class MainDataset

        <XmlElement("Header1")>
        Public Property Header1() as HeaderType

        <XmlElement("Header2")>
        Public Property Header2() as HeaderType
End Class

<Serializable()>
Public Class HeaderType

        <XmlElement("Rows")>
        Public Property Rows() as RowType
End Class

<Serializable()>
Public Class RowType

        <XmlElement("ColumnA")>
        Public Property ColumnA as String

        <XmlElement("ColumnB")>
        Public Property ColumnB as String

        <XmlElement("ColumnC")>
        Public Property ColumnC as String
End Class

XSD:

<?xml version="1.0" standalone="yes"?>
<xs:schema id="MainDataset" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element msdata:UseCurrentLocale="true" name="MainDataset">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Header1">          
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Rows">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element minOccurs="0" name="ColumnA" type="xs:string"/>
                                        <xs:element minOccurs="0" name="ColumnB" type="xs:string"/>
                                        <xs:element minOccurs="0" name="ColumnC" type="xs:string"/>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>

                <xs:element name="Header2">          
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Rows">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element minOccurs="0" name="ColumnA" type="xs:string"/>
                                        <xs:element minOccurs="0" name="ColumnB" type="xs:string"/>
                                        <xs:element minOccurs="0" name="ColumnC" type="xs:string"/>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

【问题讨论】:

  • 您能否详细解释一下您的最终目标是什么?在我看来,您只是想将数据集的内容转换为对象。你想达到什么目的?
  • 我有一个数据集,为什么:-HeaderTable1 RowTable1 -HeaderTable2 RowTable2 在对象中我有 2 个数组(HeaderTable1,HeaderTable2),在 RowTable1 中,2 个数组每个都有默认值 {} 如果输入数据集仅在 Header Tables 中有行,而在 Rows Table 中没有我的内部 RowTable 数组被反序列化为“Nothing”,而不是默认值 {}。如果可能的话,我想有一个默认的
  • 好的,但是你期望的输出是什么。通过您的代码,看起来您想要实现的只是将数据集转换为对象。那个物体是什么?为什么要通过 WriteXml 序列化数据集的过程只是为了再次反序列化它?
  • 我没有找到更好的方法来转换它
  • 我用类和 xsd 示例编辑了主帖

标签: vb.net dataset deserialization


【解决方案1】:

问题已解决...如果我使用列表而不是数组,我会收到一个空列表,而不是空对象。 谢谢大家

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多