Paul Dietz Ответов: 2

Jsonconvert.deserialize to class возвращает null


Я пытаюсь десериализовать следующую строку Json в коллекцию списков классов c# .net, но Jsonconvert.deserialize возвращает null. Может ли кто-нибудь объяснить мне, что я делаю не так?

string strjson = "{ 'TestInfo':[{'testId':1,'testShortDescription':'TankTest','testLongDescription':'Tank Test ','testTypeId':2,'testLimitsId':null},{'testId':2,'testShortDescription':'FuelPump1','testLongDescription':'Fuel Pump 1','testTypeId':4,'testLimitsId':null},{'testId':3,'testShortDescription':'FuelPump2','testLongDescription':'Fuel Pump 2','testTypeId':4,'testLimitsId':null},{'testId':4,'testShortDescription':'TankAudit','testLongDescription':'Tank Chamber Audit','testTypeId':6,'testLimitsId':null}]}";
                      TestInfoCollectionCS testinfocollection = JsonConvert.DeserializeObject<TestInfoCollectionCS>(strjson);


Вот класс коллекции:

using System;
using System.Collections.Generic;
using System.Text;
using TestITMobileApp.Model;

namespace TestITMobileApp.App_Data
{
    public class TestInfoCollectionCS
    {
        private List<TestInfoCS> testinfocollection;

        public List<TestInfoCS> TestInfoCollection { get => testinfocollection; set => testinfocollection = value; }
    }
}


Вот вам и звонок:

using System;
using System.Collections.Generic;
using System.ComponentModel;

namespace TestITMobileApp.Model
{
    public class TestInfoCS 
    {
        #region "Private variables""
        private int testId;
        private string testShortDescription;
        private string testLongDescription;
        private int? testTypeId;
        private int? testLimitsId;
        #endregion
        #region "Properties"
        #region "TestID"
        public int TestID { get => testId; set => testId = value; }
        #endregion
        #region "TestShortDescription"
        public string TestShortDescription { get => testShortDescription; set => testShortDescription = value; }
        #endregion
        #region "TestLongDescription"
        public string TestLongDescription { get => testLongDescription; set => testLongDescription = value; }
        #endregion
        #region "TestTypeId"
        public int? TestTypeId  { get => testTypeId; set => testTypeId = value; }
        #endregion
        #region "TestLimitsId"
        public int? TestLimitsId { get => testLimitsId; set => testLimitsId = value; }
        #endregion
        #endregion
    }
}


Что я уже пробовал:

Попробовал запустить приведенный выше код, но десериализация json convert возвращает null.

2 Ответов

Рейтинг:
2

ksk

Узел TestInfo в JSON не соответствует свойству TestInfoCollection.
JsonConvert.DeserializeObject может оставить свойства члена ссылочного типа null во время десериализации без атрибута [JsonProperty] в свойстве.

Попробовать это:

1. синхронизируйте имя свойства в классе и в файле JSON.
2. Добавьте атрибут [JsonProperty] к свойству в классе C#.

Или добавьте атрибут [JsonProperty("TestInfo")] в свойство TestInfoCollection.

/ Оба эти подхода помогли мне в одной и той же ситуации.


Рейтинг:
0

Gerry Schmitz

"Дело" не совпадает.

Имена элементов JSON имеют нижний регистр; свойства класса-верхний регистр (поля имеют нижний регистр и недоступны).