У меня есть список, в который я добавляю элементы, как показано,
foreach (int item in _elementList)
{
_deletionBody.Add(new KeyValuePair<string, int>("ID", item));
}
Когда я сериализую его в json, JsonConvert.SerializeObject(_deletionBody)
я осознаю
[{"Key":"ID","Value":8000},{"Key":"ID","Value":8001}]
Но формат мне нужен
[{"ID":8000},{"ID":8001}]
Как мне получить в вышеуказанном формате? Или есть лучший способ сделать это?
Лучше создать Dictionary
вместо List
, или вы можете создать ViewModel
Спасибо; Никогда не думал о создании модели.
Основываясь на том, что вы предоставили, похоже, что когда вы сериализуете этот список с помощью JsonConvert.SerializeObject, он дает вам массив JSON, где каждый элемент является объектом с двумя свойствами: «Ключ» и «Значение».
Чтобы получить выходной формат, который вы ищете, вы можете изменить свой код, чтобы создавать объекты только со свойством «ID» вместо использования пар «ключ-значение». Вот пример этого:
List<object> deletionBody = new List<object>();
foreach (int item in _elementList)
{
deletionBody.Add(new { ID = item });
}
string json = JsonConvert.SerializeObject(deletionBody);
Это создаст список объектов с одним свойством «ID», и когда вы сериализуете его с помощью JsonConvert.SerializeObject, он должен предоставить вам выходной формат, который вы ищете.
Надеюсь это поможет! 🤗
Ниже должно решить эту проблему. Он создает анонимный объект со структурой, которой вы пользуетесь, а затем сериализует его.
var list = new List<KeyValuePair<string, int>>();
list.Add(new KeyValuePair<string, int>("ID", 8001));
var toSerialize = list.Select(x => new { ID = x.Value });
var json = JsonConvert.SerializeObject(toSerialize);
Они не совпадают, потому что ваш json представляет собой список KeyValuePairs
. Ожидаемый json представляет собой список Objects
с property
именем ID
.
public class SomeClass
{
public int ID { get; set; }
}
var items = new List<SomeClass>()
{
new SomeClass() { ID = 8000} ,
new SomeClass() { ID = 8001} ,
};
string json = Newtonsoft.Json.JsonConvert.SerializeObject(items);
Если вам все еще нужен ключ с данными, вы можете просто пометить его [JsonIgnore]
. Обратите внимание, что JsonIgnore
существует как в System.Text
, так и в Newtonsoft.Text
, поэтому обязательно укажите соответствующую ссылку.
[JsonIgnore]
public string Key { get; set; }
Вам вообще не нужен цикл foreach, просто используйте этот код:
var json = JsonConvert.SerializeObject(_elementList.Select(item => new { ID = item }));
Почему вы используете
KeyValuePair
в первую очередь? Это в основном для предметов вDictionary
. Почему бы не добавить элементы со свойствомID
, и тогда вы получите нужный формат?