JSON反序列化覆盖现有数据表结构

标签 json vb.net datatables

我正在使用 NewtonSoft.json 对 json 进行简单的反序列化:

 Private Sub Deserialize()
        Dim json As String = ""
        Try
            Using sr As StreamReader = New StreamReader("C:\Temp\file.json")
                json = sr.ReadToEnd
            End Using
            dataset= JsonConvert.DeserializeObject(Of DataSet)(json)
        Catch ex As Exception
        End Try
    End Sub

数据集是在 vb 代码中预定义的。客户现在想要向数据集中的数据表再添加 5 列。我在该表中定义了列,但是当发生反序列化时,数据表列将被覆盖回原始状态,即没有新列。

数据表总是添加和删除列。这就是生意。拥有数千条具有原始 json 布局的现有记录,如何在不更改现有数据结构的情况下加载数据,并允许用户将数据添加到新列?

我是 json 新手,希望能得到任何帮助。

最佳答案

您使用特定架构序列化了DataSet,当您反序列化它时,您将获得确切的架构。这就是序列化的工作原理。如果您想要合并现有的 DataSet,或者想要在反序列化后添加额外的列,则必须以编程方式执行此操作。

在您的示例代码中,假设dataset是现有的DataSet,您需要反序列化为一个新的临时DataSet,然后步行通过此过程,根据需要修复架构,然后将其逐行合并到现有的 DataSet 中。

如果您的架构是动态的,您将必须在列表中的某个位置存储一些有关列的元数据。至少包括列名称和类型。反序列化后,您可以遍历该列表以查找 DataSet 中缺少的任何列,以编程方式创建具有正确类型的列,然后将它们添加到其中。


有一个DataSet.Merge方法可能会帮助您,它有一些关于如何处理丢失架构的选项。

When the Merge method is called, the schemas of the two DataSet objects are compared because it is possible that the schemas may have been changed. For example, in a business-to-business scenario, new columns may have been added to an XML schema by an automated process. If the source DataSet contains schema elements (added DataColumn objects) that are missing in the target, the schema elements can be added to the target by setting the missingSchemaAction argument to MissingSchemaAction.Add. In that case, the merged DataSet contains the added schema and data.

可能就像替换反序列化行一样简单:

dataset.Merge(JsonConvert.DeserializeObject(Of DataSet)(json), true, MissingSchemaAction.AddWithKey)

关于JSON反序列化覆盖现有数据表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45445210/

相关文章:

c# - 将 C# ThreadStart 委托(delegate)转换为 VB.NET

jquery - 更新现有 jQuery 对象的选项

javascript/json .length 对于长度为 3 的数组返回 1

java - Hibernate 无法将许多学生映射到一个类(class)

php - Swift/PHP 如何使用 Alamofire 在 UITableView 中显示 mysql 数据(json)

jquery - 获取具有属性 "bVisible: false"的数据表列的值

javascript - 数据表 - oLanguage.sInfo 问题

javascript - document.write < 将无法工作,除非我使用 < 我该怎么做才能生成链接?

vb.net - 替换 vb.net 中的 "

mysql - VB.NET 下拉列表未填充所有项目