json - 如何使用 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
只有函数的结果(响应)保持为空,但我不知道为什么。我想要的是从标题和行中检索数据并将它们填写到我的表单中。
解决方案
推荐阅读
- html - 对烧瓶模板的更改未显示在已部署的网站上
- android - 从 Activity 更新 Fragment 中的 textView
- webpack - 在配置中更改主机名后 Vuejs 控制台错误
- laravel - Laravel (1/1) NotFoundHttpException in RouteCollection.php 第 179 行
- mysql - 在 2 个不同的表中交换列值
- angular - Angular 6 - 无法在特定函数内运行外部函数
- python - 访问从 Microsoft Graph API 获得的特定 JSON 嵌套数据
- python - 在keras中从一开始就训练有很高的准确率是正常的吗?
- pandas - 使用日期时间组件作为级别的多索引重新索引
- php - 如何选择所有前后没有空格的“?