#c# #json #.net-core
Вопрос:
Мой класс модели ответа
public class MyModel
{
public Tuple<string, string> Data{ get; set; }
}
var data = new MyModel
{
Data = Tuple.Create("error", "12345");
};
что приводит к следующему ответу json
{
"data": {
"item1": "error",
"item2": "12345"
}
}
Что я хочу, так это создать ответ следующим образом
"data" : [{ "error" : "12345" }]
Это item1
и item2
, конечно, динамические данные, и это может быть что угодно типа string. Я говорю это, потому что я не могу просто украсить свойства JsonProperty
атрибутом.
Комментарии:
1. Есть ли причина, по которой это кортеж? Похоже, что массив keyvaluepair послужил бы вам лучше.
2. @BenMatthews
KeyValuePair
по умолчанию не будет сериализован в необходимый формат.3. Я упускаю какую-то сложную часть здесь. Зачем использовать кортеж, когда желаемый результат-это что-то другое.
4. @GuruStron Ах, вы абсолютно правы. Моя ошибка.
Ответ №1:
Вам нужно либо реализовать пользовательский сериализатор для вашего кортежа, либо изменить модель, чтобы она представляла желаемую структуру. Если вы не хотите создавать какие-то конкретные типы для своих внутренних данных, вы можете использовать Dictionary
соглашение о сериализации:
public class MyModel
{
public Dictionary<string, string>[] Data{ get; set; }
}
И творение:
var data = new MyModel
{
Data = new[]
{
new Dictionary<string, string> { { "error", "message" } }
}
};
Или превратите свое поле в массив объектов и создайте анонимные:
public class MyModel
{
public object[] Data{ get; set; }
}
var data = new MyModel
{
Data = new[]
{
new { error = "message" }
}
}