Как сериализовать словарь < int, object > в JSON, но игнорировать ключ

Я использовал его для построения объектов, выделенных в стеке через alloca ().

бесстыдный плагин: я написал о нем здесь .

1
задан neildt 17 January 2019 в 17:15
поделиться

3 ответа

Вы не можете сделать это, потому что эта структура JSON недопустима:

"hotels": { "hotel_id": 9036, "name": "My Hotel Name", ... }, { ... }

Однако вы можете выбрать только значения и сериализовать их:

hotels.Values;

Чтобы получить это:

"hotels": [ { "hotel_id": 9036, "name": "My Hotel Name", ... }, { ... } ]

Учитывая, что это часть класса, вам понадобится новая модель:

public class SomeName
{
    public List<Hotel> Hotels { get; set; }
}

var someName = new SomeName
{
    Hotels = hotels.Values.ToList();
};
0
ответ дан Camilo Terevinto 17 January 2019 в 17:15
поделиться

Формат "hotels": { "hotel_id": 9036, "name": "My Hotel Name", ... },.. недопустим, но вы можете сделать его массивом "hotels": [ { "hotel_id": 9036, "name": "My Hotel Name", ... } ].

Вы можете сделать это, пометив свой словарь с помощью JsonIgnore и выставив коллекцию отелей, которая содержит значения из словаря отелей.

Например,

var hotel = new Results
{
    id= "d875e165-4705-459e-8532-fca2ae811ae0",
    HotelDictionary = new Dictionary<int,Hotels> {
    [2323]=new Hotels{Id=2323,Name="Sample1"},
    [1323]=new Hotels{Id=1323,Name="Sample2"},
    }
};
var jsonString = JsonConvert.SerializeObject(hotel,Newtonsoft.Json.Formatting.Indented);

Где Results and Hotels определены как (обратите внимание, я игнорировал другие свойства, чтобы сосредоточиться на словаре, но вы можете добавить их в качестве окончательного решения).

public class Results
{

    public string id { get; set; }
    [JsonIgnore]
    public Dictionary<int,Hotels> HotelDictionary { get; set; }
    [JsonProperty("hotels")]
    public IEnumerable<Hotels> Hotels => HotelDictionary.Select(x=>x.Value);
}

public class Hotels
{
    [JsonProperty("hotel_id")]
    public int Id{get;set;}
    [JsonProperty("name")]
    public string Name{get;set;}
}

Выход

{
  "id": "d875e165-4705-459e-8532-fca2ae811ae0",
  "hotels": [
    {
      "hotel_id": 2323,
      "name": "Sample1"
    },
    {
      "hotel_id": 1323,
      "name": "Sample2"
    }
  ]
}
0
ответ дан Anu Viswan 17 January 2019 в 17:15
поделиться

Я думаю, что проблема может заключаться в том, что вам нужно добавить hotel_id в качестве свойства объекта Hotel.

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

0
ответ дан Ian 17 January 2019 в 17:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: