. NET JSON DeserializeObject to datatable - Проблема синтаксического анализа - PullRequest
0 голосов
/ 01 апреля 2020

Когда я пытаюсь десериализовать строку JSON, значения некоторых атрибутов JSON преобразуются из числа с плавающей точкой в ​​int.

Это строка JSON:

{
  "skip": 0,
  "take": 5,
  "rows": [
    {
      "PRIJSLIJST": "I0109",
      "DIENST": "506",
      "PRIJS": 199.99,
      "BI_WAARDE": 199.99,
      "NI_WAARDE": 199.99
    }
  ]
}

Значение "199,99" десериализовано до "199".

Я также пытался JsonSerializerSettings, но он также не работал (я пробовал в разных культурах).

Dim settings As New JsonSerializerSettings() With {.FloatParseHandling = FloatParseHandling.Decimal, .Culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US")}
Dim dt As DataTable = Newtonsoft.Json.JsonConvert.DeserializeObject(Of DataTable)(strOutput_JSON, settings)

ОБНОВЛЕНИЕ РЕШЕНИЯ

Моим начальным значениям было присвоено 0, поэтому тип данных был установлен в целое число. Затем я попытался заменить мои начальные значения десятичными, затем для типа данных было установлено значение с плавающей запятой / десятичное число.

1 Ответ

0 голосов
/ 11 апреля 2020

Добавьте следующие импорта -

Imports System.Collections.Generic
Imports Newtonsoft.Json

Создайте класс для вашей десериализации DataTable, как показано ниже -

Public Class DataTableRow
    Public PRIJSLIJST as String
    Public DIENST as String
    Public PRIJS as Decimal
    Public BI_WAARDE as Decimal
    Public NI_WAARDE as Decimal
End Class

Public Class DataTable
    Public skip as Integer
    Public take as Integer
    Public rows as List(Of String)()
End Class

, а затем десериализуйте, как показано ниже -

Dim DeSerialDataTable as DataTable = JsonConvert.DeserializeObject(Of DataTable)(strOutput_JSON)
...