Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}] / 25 сообщений из 80, страница 1 из 4
28.11.2012, 13:24
    #38056233
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
Нужно сериализовать произвольную выборку в json, подозреваю, что это хорошо делать с помощью linq2sql или ef, а чем именно и как?
Ткните в какой-нибудь хэлловорлд по теме. Использовать DataContractJsonSerializer умею.
...
Рейтинг: 0 / 0
28.11.2012, 22:36
    #38057144
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
System.Web.Extensions.dll
Код: c#
1.
2.
var items = Enumerable.Range(1, 10).Select(d => new { id = d, name = "name" + d });
string json = new JavaScriptSerializer().Serialize(items);
...
Рейтинг: 0 / 0
29.11.2012, 10:49
    #38057466
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
Первую строчку я не совсем понял. В ней вроде бы создается коллекция из 10и объектов. Если да, то мне не ясно, как по аналогии сделать сериализацию выборки из базы. Допустим, нужно сериализовать данные, которые можно вернуть конкретным запросом:
Код: sql
1.
select distinct top 10 UnitID, Name from tblUnit where ID>5 order by Name

Как их извлечь в пригодном для сериализации виде?
...
Рейтинг: 0 / 0
29.11.2012, 12:50
    #38057740
Местный король Делфей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
AntonariyПервую строчку я не совсем понял. В ней вроде бы создается коллекция из 10и объектов. Если да, то мне не ясно, как по аналогии сделать сериализацию выборки из базы. Допустим, нужно сериализовать данные, которые можно вернуть конкретным запросом:
Код: sql
1.
select distinct top 10 UnitID, Name from tblUnit where ID>5 order by Name

Как их извлечь в пригодном для сериализации виде?
XML/ORM
...
Рейтинг: 0 / 0
29.11.2012, 14:38
    #38058028
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
Кажется нашел нужное направление , но возник вопрос: разве студия не должна сама генерить классы сущностей? Где-то слышал, что должна.
...
Рейтинг: 0 / 0
29.11.2012, 15:55
    #38058287
няка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
если бы это не Antonariy я бы подумал что троль
...
Рейтинг: 0 / 0
29.11.2012, 16:29
    #38058382
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
А чо? Я просто в вопросе не в зуб ногой, а сделать нужно 1) внезапно 2) без отрыва от основной деятельности. Вот и мечусь как курица без головы.
...
Рейтинг: 0 / 0
29.11.2012, 16:37
    #38058405
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
AntonariyПервую строчку я не совсем понял. В ней вроде бы создается коллекция из 10и объектов. Если да, то мне не ясно, как по аналогии сделать сериализацию выборки из базы. Допустим, нужно сериализовать данные, которые можно вернуть конкретным запросом:
Код: sql
1.
select distinct top 10 UnitID, Name from tblUnit where ID>5 order by Name

Как их извлечь в пригодном для сериализации виде?
Ты издеваешься? Получи свою выборку в виде коллекции IEnumerable<T> и воспользуйся кодом, который я тебе написал. Или тебе нужно рассказать, как обратиться к базе и получить коллекцию?
...
Рейтинг: 0 / 0
29.11.2012, 17:04
    #38058486
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
МСУИли тебе нужно рассказать, как обратиться к базе и получить коллекцию?Совершенно верно. Можно не рассказывать, а тынц дать. Кроме ADODB я же ничего не юзал, до сих пор его более чем хватало. select for xml -> domdocument -> xsl и до свидания. Однако сейчас нужно генерить много разнообразного json'а, и заниматься этим с помощью xsl... в общем грустно. Сделать <Serializable> класс и навтыкать в нужные свойства результаты выборок, такой был план.
...
Рейтинг: 0 / 0
29.11.2012, 17:41
    #38058611
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
AntonariyСовершенно верно
Entity Framework Step by Step
...
Рейтинг: 0 / 0
30.11.2012, 15:08
    #38059900
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
МСУAntonariyСовершенно верно
Entity Framework Step by Step Отличный хеловорлд, для тупых, люблю такие. Все получилось.

А как быть, если нужно сделать выборку заранее неизвестного типа, название которого приходит в текстовой переменной?
...
Рейтинг: 0 / 0
30.11.2012, 17:36
    #38060291
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
AntonariyА как быть, если нужно сделать выборку заранее неизвестного типа, название которого приходит в текстовой переменной?
Я ж тебе вначале пример привёл как-раз на анонимном типе :)
...
Рейтинг: 0 / 0
30.11.2012, 17:43
    #38060320
Местный король Делфей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
МСУAntonariyА как быть, если нужно сделать выборку заранее неизвестного типа, название которого приходит в текстовой переменной?
Я ж тебе вначале пример привёл как-раз на анонимном типе :)
я так понял он хочет имя таблицы в строковой переменной передавать. Тогда непонятно зачем вообще орм для такого, хотя наверняка можно извратиться с рефлексией
...
Рейтинг: 0 / 0
30.11.2012, 17:51
    #38060343
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
МСУAntonariyА как быть, если нужно сделать выборку заранее неизвестного типа, название которого приходит в текстовой переменной?
Я ж тебе вначале пример привёл как-раз на анонимном типе :)Слишком уж анонимном. Не ясно, как в этом примере таблицу задать.
...
Рейтинг: 0 / 0
30.11.2012, 18:00
    #38060368
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
Местный король ДелфейМСУпропущено...

Я ж тебе вначале пример привёл как-раз на анонимном типе :)
я так понял он хочет имя таблицы в строковой переменной передавать. Да.

Местный король ДелфейТогда непонятно зачем вообще орм для такогоЧтобы не копипастить практически идентичный код для однотипных объектов.

А вообще я готов рассмотреть все способы превращения набора записей в json. Кроме xsl и цикла по записям.
...
Рейтинг: 0 / 0
30.11.2012, 18:06
    #38060384
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
AntonariyЧтобы не копипастить практически идентичный код для однотипных объектов.В смысле для этого — таблицы в переменной. А орм для сериализации, это единственное, что пришло в голову. Не считая линка, который к тому же предлагает классы таблиц руками пилить.
...
Рейтинг: 0 / 0
30.11.2012, 18:10
    #38060392
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
Код: c#
1.
string json = new JavaScriptSerializer().Serialize(myDataTable.ToDynamic());



ToDynamic
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public static class DataTableExtensions
{
    public static List<dynamic> ToDynamic(this DataTable dt)
    {
        var dynamicDt = new List<dynamic>();
        foreach (DataRow row in dt.Rows)
        {
            dynamic dyn = new ExpandoObject();
            foreach (DataColumn column in dt.Columns)
            {
                var dic = (IDictionary<string, object>)dyn;
                dic[column.ColumnName] = row[column];
                dynamicDt.Add(dyn);
            }
        }
        return dynamicDt;
    }
}

...
Рейтинг: 0 / 0
01.12.2012, 01:11
    #38060783
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
Как этим пользоваться? Скопипастил я класс, получил datatable:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public DataTable GetDataTable(Engine mEngine, string queryString, string tableName)
{
	DataSet ds = new DataSet();
	SqlDataAdapter adapter = new SqlDataAdapter(queryString, mEngine.DataService.Setup.ConnectionString);
	adapter.Fill(ds, tableName);
	ds.Tables(0).Load(ds.CreateDataReader(), LoadOption.OverwriteChanges);
	return ds.Tables(0);
}

myDataTable = GetDataTable(mEngine, "select CatalogueID, Name from tblCatalogue", "tblCatalogue");

Откуда у myDataTable возьмется ToDynamic?
...
Рейтинг: 0 / 0
01.12.2012, 08:57
    #38060877
Местный король Делфей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
AntonariyОткуда у myDataTable возьмется ToDynamic?
екстеншен-метод в спойлере
...
Рейтинг: 0 / 0
01.12.2012, 10:33
    #38060898
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
Местный король ДелфейAntonariyОткуда у myDataTable возьмется ToDynamic?
екстеншен-метод в спойлере
Ёпрст, я не слепой.
Я просто не понимаю, как этот экстенш прикрутить к DataTable.
...
Рейтинг: 0 / 0
01.12.2012, 10:34
    #38060899
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
Вопрос снят, внезапно доперло.
...
Рейтинг: 0 / 0
06.12.2012, 21:07
    #38068711
няка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
МСУ,

это у вас в продакшине екстеншин с ошибкой?
...
Рейтинг: 0 / 0
07.12.2012, 20:11
    #38070458
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
Ладно ошибка, ее исправил, но ведь и результат ни к селу.
Нужно [{"id":1,"name":2}], а получается [[{"Key":"id","Value":1},{"Key":"name","Value":2}]]
А еще зачем-то сериализует null.
...
Рейтинг: 0 / 0
08.12.2012, 01:12
    #38070711
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
AntonariyМестный король Делфейпропущено...

я так понял он хочет имя таблицы в строковой переменной передавать. Да.

Местный король ДелфейТогда непонятно зачем вообще орм для такогоЧтобы не копипастить практически идентичный код для однотипных объектов.Переосмыслил это. Разделил "практически" и идентичный код, получил что хотел таким образом:

Код: vbnet
1.
2.
3.
4.
Dim items = From v In ef.tblCatalogue
            Where v.CatalogueID = 2
            Select v.CatalogueID, v.ClassificatorID, v.Code, v.Name
Dim json As String = New JavaScriptSerializer().Serialize(items.ToList())


Осталось как-то избавиться от null'ов.
...
Рейтинг: 0 / 0
08.12.2012, 04:10
    #38070763
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}]
Избавился от null'ов и прочих неугодных значений так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    Private Function Serialize2JSON(ByVal objInput As Object) As String
        Dim jss As New JavaScriptSerializer()
        Return Regex.Replace(jss.Serialize(objInput), "(,?)""\w+"":(null|false|0|"""")(,?)(\}?)", New MatchEvaluator(AddressOf ReplaceNull))
    End Function

    Public Function ReplaceNull(ByVal m As Match) As String
        If Len(m.Groups(4).Value) > 0 Then
            Return m.Groups(4).Value
        Else
            Return m.Groups(1).Value
        End If
    End Function
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / SELECT id, name -> DataContractJsonSerializer -> [{"id":1,"name":2}] / 25 сообщений из 80, страница 1 из 4
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]