首页 > 解决方案 > 如何使用 Json.Net 将 Json 文件中的数据检索到 Winform

问题描述

我对 Json 仍然很陌生,但我正在尝试将 Json 文件中的数据导入 Winform 的表单字段。为此,我想使用 Json.NET。我在https://www.codeproject.com/Articles/1201466/Working-with-JSON-in-Csharp-VB找到了以下示例。

我已经以自己的形式处理了代码,但我无法将 Json 数据放入表单字段中。

我的 Json 文件具有以下格式:

{
"DataSource": {
    "Id": "b94809c324ee4ab5b7dfa81e00b1e535",
    "Name": "DataSourceName",
    "Headers": [{
        "Name": "ID",
        "DisplayAt": "None"
    }, {
        "Name": "Datum storing",
        "DisplayAt": "Title"
    }, {
        "Name": "Tijdstip melding",
        "DisplayAt": "None"
    }, {
        "Name": "Projectnummer",
        "DisplayAt": "None"
    }, {
        "Name": "Projectnaam",
        "DisplayAt": "None"
    }, {
        "Name": "Servicemonteur",
        "DisplayAt": "None"
    }, {
        "Name": "Start reistijd",
        "DisplayAt": "None"
    }, {
        "Name": "starttijd werkzaamheden",
        "DisplayAt": "None"
    }, {
        "Name": "eindtijd werkzaamheden",
        "DisplayAt": "None"
    }, {
        "Name": "eind reistijd",
        "DisplayAt": "None"
    }, {
        "Name": "omschrijving storing",
        "DisplayAt": "None"
    }, {
        "Name": "oorzaak storing",
        "DisplayAt": "None"
    }, {
        "Name": "omschrijving werkzaamheden",
        "DisplayAt": "None"
    }, {
        "Name": "aanbevelingen",
        "DisplayAt": "None"
    }, {
        "Name": "verbruikte materialen",
        "DisplayAt": "None"
    }, {
        "Name": "zoekstring",
        "DisplayAt": "None"
    }, {
        "Name": "categorie_ID",
        "DisplayAt": "None"
    }, {
        "Name": "melding_van",
        "DisplayAt": "None"
    }],
    "Rows": [
        ["valueId", "2018-02-26", "13:41:00", "104", "ProjectName1", "Engineer1,  Engineer2", "11:00:00", "11:30:00", "12:45:00", "13:15:00", "Omschrijving", "Onbekend", "Omschrijving 2.", "Omschrijving 3.", null, "Omschrijving 4", "1", null],
        ["valueId", "2018-03-24", "13:41:00", "104", "ProjectName2", "Engineer1,  Engineer2", "11:00:00", "11:30:00", "12:45:00", "13:15:00", "Omschrijving", "Onbekend", "Omschrijving 2.", "Omschrijving 3.", null, "Omschrijving 4", "1", null], 
        ["valueId", "2018-03-12", "18:06:00", "173", "ProjectName3", "Engineer1,  Engineer2", "11:00:00", "11:30:00", "12:45:00", "13:15:00", "Omschrijving", "Onbekend", "Omschrijving 2.", "Omschrijving 3.", null, "Omschrijving 4", "1", null]
    ],
    "TotalRows": 3,
    "LastUpdated": "2020-06-19T13:15:17.7400000Z",
    "CompanyId": 12345
  }
}

从这个文件中,我想从标题和行中获取数据。我开始从文件中检索标题。所以我通过 jsonutils.com 制作了以下课程:

Imports Newtonsoft.Json

Namespace Models
    Public Class Header

        <JsonProperty("Name")>
        Public Property Name As String

        <JsonProperty("DisplayAt")>
        Public Property DisplayAt As String
    End Class

    Public Class DataSource

        <JsonProperty("Id")>
        Public Property Id As String

        <JsonProperty("Name")>
        Public Property Name As String

        <JsonProperty("Headers")>
        Public Property Headers As Header()

        <JsonProperty("Rows")>
        Public Property Rows As String()()

        <JsonProperty("TotalRows")>
        Public Property TotalRows As Integer

        <JsonProperty("LastUpdated")>
        Public Property LastUpdated As DateTime

        <JsonProperty("CompanyId")>
        Public Property CompanyId As Integer
    End Class

    Public Class Category

        <JsonProperty("DataSource")>
        Public Property DataSource As DataSource
    End Class

End Namespace

使用以下代码,我想获取 DataSource 类的值:

    Private Sub GetData()

    ' Retrieve JSON data from file
    Dim rawJson = File.ReadAllText(Path.Combine(filePath, fileName))

    ' Convert to C# Class typed object
    Result = JsonHelper.ToClass(Of DataSource)(rawJson)

    UpdateUI()

End Sub

此时 Json 文件已加载到 rawJson 中,并将通过以下函数进行反序列化:

    Public Function ToClass(Of T)(data As String, Optional jsonSettings As JsonSerializerSettings = Nothing) As T

    Dim response = Nothing

    If Not String.IsNullOrEmpty(data) Then
        response = If(jsonSettings Is Nothing,
            JsonConvert.DeserializeObject(Of T)(data),
            JsonConvert.DeserializeObject(Of T)(data, jsonSettings))
    End If

    Return response

End Function

只有函数的结果(响应)保持为空,但我不知道为什么。我想要的是从标题和行中检索数据并将它们填写到我的表单中。

标签: jsonvb.netjson.net

解决方案


推荐阅读