【问题标题】:POST JSON string from Form in VB.NET来自 VB.NET 表单的 POST JSON 字符串
【发布时间】:2018-08-10 02:44:06
【问题描述】:

这是我的情况:

我有一个表单,它将 textarea 中的项目列表收集为 JSON 对象。

textarea 的表单如下所示:

<textarea id="listItems">
    [
     {"id":"1","name":"apple"},
     {"id":"2","name":"orange"},
     {"id":"3","name":"banana"}
    ]
</textarea>

我需要能够解析该字符串并将每个项目发布到 SQL 表中。

ItemID | ItemName
-----------------
1      | apple
2      | orange
3      | banana

我不认为我对使用 JavaScriptSerializer 类有很好的理解。我正在使用 VB.net

我还没有任何server-side 代码,但我知道我必须解析出 JSON 字符串,然后循环遍历它,然后保存每个项目。

难道我不能将 JSON 字符串转换为 DataTable,然后遍历该临时表吗?

不确定。我正在尝试解决这个问题,但一些帮助会很有用。

我还参考了一些 SO 帖子,看看我是否可以解决这个问题

This one

This one

【问题讨论】:

  • 将 JSON 反序列化为对象集合会更容易,然后遍历集合,将每个实例插入表中。无需在内存中创建DataTable 的额外工作。

标签: json vb.net javascriptserializer


【解决方案1】:

这是我找到的最佳答案,我对其进行了调整以满足我的需要。

我还包含了回答我问题的重复 POST 的链接。

我还参考了另一个类似情况的帖子。

这是 .Net Fiddle 的链接,它展示了我正在寻找的内容。

DEMO

How to deserialize JSON which can be an array or a single object

How to handle both a single item and an array for the same property using JSON.net

【讨论】:

    【解决方案2】:

    所以在服务器上期待以下 Json 对象

    [
      {"id":"1","name":"apple"},
      {"id":"2","name":"orange"},
      {"id":"3","name":"banana"}
    ]
    

    你可以这样做:

    Public Function DoSomething()
    
       Dim jsonObject = "[{""id"":""1"",""name"":""apple""},{""id"":""2"",""name"":""orange""},{""id"":""3"",""name"":""banana""}]"
       Dim obj = New JavaScriptSerializer().Deserialize(Of TestObject())(jsonObject)
    
    End Function
    

    有了这个模型

    Public Class TestObject
        Public Property id As Integer
        Public Property name As String
    End Class
    

    在运行时,您将在obj 中拥有一组对象,然后您可以对其进行操作并填充到DataTable 或直接提供给数据库。将 Json 转换为 Object 不是您在这里唯一的选择,但它是一种方便的选择。

    由于您没有指定您正在工作的上下文,因此有点不清楚什么可能是您的案例的最佳解决方案。也许您想对不同的 Json 框架(例如 Json.net)以及使用数据库的数据处理进行一些研究,以便了解如何以及何时进行。

    【讨论】:

    • 也许这是我的困惑,但我可以用 Dim jsonObject = listItems.Text 交换硬编码的 jsonObject,因为我有一个在文本区域内提交 JSON 对象的表单。
    • 是的。硬编码对象只是为了澄清。您可以将其与任何包含 JSON 的字符串进行交换。无论您是从控件还是其他地方获取它并不重要。
    • 我试过了,我得到一个错误:System.NullReferenceException:对象引用未设置为对象的实例。另外为了提供更多上下文,我使用通用实体在数据库中设置值。我这样做是为了设置值: Wth GenericEntity.Add().SetValue("id", obj(0)) End With
    • 我不熟悉通用实体,但您的 NullReferenceException 表明您正在引用不存在/尚未初始化的东西。您需要验证哪个变量为空,然后您可能能够辨别出您的问题到底是什么。但是如果没有实际的错误信息和您正在使用的代码,就很难进行远程诊断。也许从验证您的数据是否已输入开始。然后检查对象是否在数组中,最后你需要检查你的实体是否提供了你引用的所有属性
    • 所以我使用 httpbin.org 检查了我的表单,它正在发布数据。但是,它将 id 作为值发布并自动增加 id。所以输出看起来是这样的。 {0:11、1:12、2:13}。老实说,我只对在我的评论中提供的示例中发布 ID 或值感兴趣。我不确定我给你这个评论的输出格式。我期待,以及我的服务器端代码,接收对象数组。也许这就是导致空引用的原因?
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多