Как мне конвертировать IEnumerable в JSON? - PullRequest
27 голосов
/ 29 апреля 2011

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

Спасибо!

Ответы [ 5 ]

37 голосов
/ 29 апреля 2011
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);
5 голосов
/ 18 февраля 2013

Может быть, вы можете попробовать это:

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 голосов
/ 26 августа 2015

При использовании 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, чтобы браузер мог кэшировать результаты.

2 голосов
/ 29 апреля 2011

Вы можете сделать это, используя сам .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;
    }
}
2 голосов
/ 29 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...