У меня есть метод, который возвращает IEnumberable, содержащий записи 1..n. Как преобразовать результаты в строку JSON?
Спасибо!
У меня есть метод, который возвращает IEnumberable, содержащий записи 1..n. Как преобразовать результаты в строку JSON?
Спасибо!
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);
Возможно, вы можете попробовать следующее:
var categories = from c in db.tableone
select new { key = c.tableoneID, value = c.tableoneName };
JsonResult categoryJson = new JsonResult();
categoryJson.Data = categories;
return categoryJson;
Я бы посмотрел на сторонний инструмент, чтобы преобразовать ваши объекты в JSON. Вот хороший: http://json.codeplex.com/
Вы можете сделать это, как это, используя .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;
}
}
При использовании 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, чтобы браузер мог кэшировать результаты.