Подтвердить что ты не робот

Как вернуть объект 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);

Но это вернет только одну строку. Не могли бы вы помочь мне в возвращении более чем одного результата? Как получить результат в формате, указанном выше?

4b9b3361

Ответ 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"}]}