Как вернуть объект JSon
Я использую плагин jQuery, которому нужен объект JSON со следующей структурой (я буду извлекать значения из базы данных):
{ results: [
{ id: "1", value: "ABC", info: "ABC" },
{ id: "2", value: "JKL", info: "JKL" },
{ id: "3", value: "XYZ", info: "XYZ" }
] }
Вот мой класс:
public class results
{
int _id;
string _value;
string _info;
public int id
{
get
{
return _id;
}
set
{
_id = value;
}
}
public string value
{
get
{
return _value;
}
set
{
_value = value;
}
}
public string info
{
get
{
return _info;
}
set
{
_info = value;
}
}
}
Так я его сериализую:
results result = new results();
result.id = 1;
result.value = "ABC";
result.info = "ABC";
string json = JsonConvert.SerializeObject(result);
Но это вернет только одну строку. Не могли бы вы помочь мне в возвращении более чем одного результата? Как получить результат в формате, указанном выше?
Ответы
Ответ 1
Прежде всего, нет такой вещи, как объект JSON. То, что у вас есть в вашем вопросе, - это литерал объекта JavaScript (см. здесь для отличной дискуссии о различии). Вот как вы собираетесь сериализовать то, что у вас есть в JSON, хотя:
Я бы использовал анонимный тип, заполненный вашим типом results
:
string json = JsonConvert.SerializeObject(new
{
results = new List<Result>()
{
new Result { id = 1, value = "ABC", info = "ABC" },
new Result { id = 2, value = "JKL", info = "JKL" }
}
});
Также обратите внимание, что сгенерированный JSON имеет элементы результата с id
типа Number
вместо строк. Я сомневаюсь, что это будет проблемой, но было бы довольно легко изменить тип id
на string
в С#.
Я бы также подстроил ваш тип results
и избавился от полей поддержки:
public class Result
{
public int id { get ;set; }
public string value { get; set; }
public string info { get; set; }
}
Кроме того, классы обычно PascalCased
, а не camelCased
.
Здесь сгенерированный JSON из приведенного выше кода:
{
"results": [
{
"id": 1,
"value": "ABC",
"info": "ABC"
},
{
"id": 2,
"value": "JKL",
"info": "JKL"
}
]
}
Ответ 2
У вас есть только одна строка для сериализации. Попробуйте что-то вроде этого:
List<results> resultRows = new List<results>
resultRows.Add(new results{id = 1, value="ABC", info="ABC"});
resultRows.Add(new results{id = 2, value="XYZ", info="XYZ"});
string json = JavaScriptSerializer.Serialize(new { results = resultRows});
- Изменить в соответствии с исходным исходным кодом json
** Отредактируйте 2: извините, но я пропустил, что использовал JSON.NET. Используя JavaScriptSerializer
, приведенный выше код дает следующий результат:
{"results":[{"id":1,"value":"ABC","info":"ABC"},{"id":2,"value":"XYZ","info":"XYZ"}]}