Получение имени свойства при преобразовании Json из объекта в C# - PullRequest
0 голосов
/ 05 мая 2020

У меня есть класс, как показано ниже:

public class PCBulkRequest 
{ 
    public List<PCRequest> pcRequest { get; set; } 
}

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

string json = JsonConvert.SerializeObject(pcRequest, Formatting.Indented);

Результат:

{
  "pcRequest": [
    {
      "name": "John",
      "surname": "Elton"
    },
    {
      "name": "John",
      "surname": "Elton"
    }
  ]
}

Ожидаемый результат:

[
  {
    "name": "John",
    "surname": "Elton"
  },
  {
    "name": "John",
    "surname": "Elton"
  }
]

Ответы [ 2 ]

4 голосов
/ 05 мая 2020

Мы не можем понять, как вы его определили, но исходя из полученного вами результата кажется, что pcRequest в вашем коде должен быть экземпляром класса PCBulkRequest.

Следовательно Json. NET сериализует весь объект в соответствии с вашими указаниями. Если вы хотите сериализовать только список, то это довольно просто: вам нужно предоставить список из этого объекта в качестве элемента, который нужно сериализовать.

string json = JsonConvert.SerializeObject(pcRequest.pcRequest, Formatting.Indented);

Библиотека Json. NET может сериализовать только то, что вы ей говорите, она не может угадать, какой подраздел вы действительно хотели сериализовать!


NB, я бы посоветовал, возможно, более четко называть ваши переменные, чтобы вы не использовали повторно имя свойства внутри класса в качестве имени переменной для экземпляра этого класса. Это может немного запутать. И имя свойства pcRequest единственное число, поэтому похоже, что оно будет содержать один запрос, хотя на самом деле это список, что также может сбивать с толку. Ваш код станет более удобным в сопровождении и понятным (как для вас, так и для других), если вы не пожалеете времени и дадите своим переменным понятные и понятные имена.

4 голосов
/ 05 мая 2020

Просто сериализуйте список напрямую:

string json = JsonConvert.SerializeObject(pcRequest.pcRequest, Formatting.Indented);

Кстати, ваше именование на данный момент немного сбивает с толку - похоже, что у вас есть переменная с именем pcRequest, которая имеет тип PCBulkRequest, и ваше свойство pcRequest звучит так, как будто это должен быть запрос single , когда на самом деле это список. Я бы назвал такие имена:

public class PCBulkRequest
{
    public List<PCRequest> Requests { get; set; }
}

...

var bulkRequest = GetBulkRequest(); // Wherever this comes from
string json = JsonConvert.SerializeObject(bulkRequest.Requests, Formatting.Indented);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...