【发布时间】: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