Преобразование строки JSON в объект C # для сложной строки JSON - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь преобразовать строку JSON в объект C #, но получаю нулевые значения

Ниже приведена строка JSON, которую я имею

[
    {
        "extraction_method": "stream",
        "top": 0.0,
        "left": 0.0,
        "width": 559.0,
        "height": 732.2100219726562,
        "data": [[
                {
                    "top": 0.0,
                    "left": 0.0,
                    "width": 0.0,
                    "height": 0.0,
                    "text": ""
                },
                {
                    "top": 96.36,
                    "left": 129.27,
                    "width": 102.97900390625,
                    "height": 6.550000190734863,
                    "text": "Sample"
                },
                {
                    "top": 96.35,
                    "left": 311.0,
                    "width": 27.188995361328125,
                    "height": 6.550000190734863,
                    "text": "PT"
                },
                {
                    "top": 96.35,
                    "left": 361.0,
                    "width": 41.248992919921875,
                    "height": 6.550000190734863,
                    "text": "HT"
                },
                {
                    "top": 96.36,
                    "left": 432.11,
                    "width": 28.141387939453125,
                    "height": 6.550000190734863,
                    "text": "RT."
                },
                {
                    "top": 96.36,
                    "left": 480.88,
                    "width": 29.64898681640625,
                    "height": 6.550000190734863,
                    "text": "LT."
                },
                {
                    "top": 96.36,
                    "left": 522.33,
                    "width": 36.660003662109375,
                    "height": 6.550000190734863,
                    "text": "MT"
                }
            ], [
                {
                    "top": 727.57,
                    "left": 75.24,
                    "width": 14.902000427246094,
                    "height": 4.619999885559082,
                    "text": "Tee"
                },
                {
                    "top": 0.0,
                    "left": 0.0,
                    "width": 0.0,
                    "height": 0.0,
                    "text": ""
                },
                {
                    "top": 727.57,
                    "left": 315.0,
                    "width": 14.00201416015625,
                    "height": 4.619999885559082,
                    "text": "IO."
                },
                {
                    "top": 727.59,
                    "left": 381.43,
                    "width": 16.6820068359375,
                    "height": 4.619999885559082,
                    "text": "1.10"
                },
                {
                    "top": 727.59,
                    "left": 434.53,
                    "width": 25.582000732421875,
                    "height": 4.619999885559082,
                    "text": "30.00"
                },
                {
                    "top": 727.59,
                    "left": 488.98,
                    "width": 21.131988525390625,
                    "height": 4.619999885559082,
                    "text": "8.00"
                },
                {
                    "top": 727.59,
                    "left": 534.53,
                    "width": 24.469959259033203,
                    "height": 4.619999885559082,
                    "text": "18.00"
                }
            ]],
        "spec_index": 0
    }
]

И классы для объекта JSON

public class JsonHelper
{
    string top { get; set; }
    string left { get; set; }
    string width { get; set; }
    string height { get; set; }
    string text { get; set; }
}

public class RootObject
{
    public string extraction_method { get; set; }
    public double top { get; set; }
    public double left { get; set; }
    public double width { get; set; }
    public double height { get; set; }
    public List<List<JsonHelper>> data { get; set; }
    public int spec_index { get; set; }
}

И приведенный ниже код используется для получения объекта

using (StreamReader r = new StreamReader(@"SamplePDF.json"))
        {
            string json = r.ReadToEnd();
            List<RootObject> items = 
                    JsonConvert.DeserializeObject<List<RootObject>>(json);
        }

Но я получаю нулевые значения в объекте, как показано ниже (откройте изображение на новой вкладке, если изображение не отображается ниже)

Дайте мне знать, спасибо

image

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Не предоставлены следующие свойства, ниже приведены изменения.Спасибо @ Джону.

public class JsonHelper
{
    string top { get; set; }
    string left { get; set; }
    string width { get; set; }
    string height { get; set; }
    string text { get; set; }
}
0 голосов
/ 19 февраля 2019

Ваш класс выглядит не соответствующим формату строки JSON, попробуйте это

  1. добавьте новый класс
  2. удалите часть класса "public class Class1 {}"
  3. скопировать строку JSON
  4. Правка -> Специальная вставка -> Вставить JSON как классы

, тогда JSON.Net сопоставит строку Object и JSON

Я попробовал ваш пример строки JSON, и объект создается на шаге 4, как это

public class Rootobject
{
    public Class1[] Property1 { get; set; }
}

public class Class1
{
    public string extraction_method { get; set; }
    public float top { get; set; }
    public float left { get; set; }
    public float width { get; set; }
    public float height { get; set; }
    public Datum[][] data { get; set; }
    public int spec_index { get; set; }
}

public class Datum
{
    public float top { get; set; }
    public float left { get; set; }
    public float width { get; set; }
    public float height { get; set; }
    public string text { get; set; }
}
0 голосов
/ 19 февраля 2019

Вы можете присвоить им значение по умолчанию, например:

public int X { get; set; } = 0;
public string Y { get; set; } = "";
...