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

Как преобразовать IEnumerable в JSON?

У меня есть метод, который возвращает IEnumberable, содержащий записи 1..n. Как преобразовать результаты в строку JSON?

Спасибо!

4b9b3361

Ответ 1

IEnumerable<int> sequenceOfInts = new int[] { 1, 2, 3 };
IEnumerable<Foo> sequenceOfFoos = new Foo[] { new Foo() { Bar = "A" }, new Foo() { Bar = "B" } };

var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
string outputOfInts = serializer.Serialize(sequenceOfInts);
string outputOfFoos = serializer.Serialize(sequenceOfFoos);

Что производит вывод

[1,2,3]
[{"Bar":"A"},{"Bar":"B"}]

И затем вы можете вернуть свою последовательность

IEnumerable<Foo> foos = serializer.Deserialize<IEnumerable<Foo>>(outputOfFoos);

Ответ 2

Возможно, вы можете попробовать следующее:

var categories = from c in db.tableone
                 select new { key = c.tableoneID, value = c.tableoneName };

JsonResult categoryJson = new JsonResult();
categoryJson.Data = categories;

return categoryJson;

Ответ 3

Я бы посмотрел на сторонний инструмент, чтобы преобразовать ваши объекты в JSON. Вот хороший: http://json.codeplex.com/

Ответ 4

Вы можете сделать это, как это, используя .NET Framework самостоятельно и без использования сторонних инструментов

using System.Web.Script.Serialization;

public class Json
{
    public string getJson()
    {
       // some code //
       var products = // IEnumerable object //
       string json = new JavaScriptSerializer().Serialize(products);
       // some code //
       return json;
    }
}

Ответ 5

При использовании MVC вы можете использовать System.Web.Helpers.Json class. Мне нужно несколько элементов, отображаемых на странице в json:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Categorie { get; set; }
}

В представлении:

@{
          var products = new List<Product> { 
                new Product{ Id = 1, Name = "test product", Categorie = 1},
                new Product{ Id = 2, Name = "another product",Categorie = 1},
                new Product{ Id = 3, Name = "more stuff",Categorie = 1},
                new Product{ Id = 4, Name = "even more",Categorie = 2},
                new Product{ Id = 5, Name = "and the last",Categorie = 2}
            };
        }

    //fill the javascript variable with products
    var products= @(Html.Raw(Json.Encode(products) )); 

Обратите внимание на Html.Raw...

Хотя это может быть полезно, не используйте его. Предоставление больших разделов данных на вашей странице делает страницу большой и может вызвать проблемы с производительностью, когда браузер не может кэшировать ваши результаты. Если вам нужно больше данных, используйте вызов REST, чтобы браузер мог кэшировать результаты.