powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Json, как правильно сделать
15 сообщений из 15, страница 1 из 1
Json, как правильно сделать
    #37832857
mnde
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делаю страницу на asp.net mvc3
есть метод, который возращает Json
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Roll(int roll)
        {
        // to do something

            var jsonData = new
            {
                MapInfo = RenderGame(g),
                GameLog = string.Join("
", g.LogInfo),

            };

            return Json(jsonData);

        }
 public  JsonResult RenderGame(Game g)
        {
           
            var jsonData = new
            {
                Map = g.Cells.Select(x => new
                {
                    id = x.Value.Id,
                    text = x.Value.PrintTextOnCell,
                    color = MapHelper.GetPlayerColorRGB(x.Value.Owner),
                }),
                Players = MapHelper.GetPlayerState(g).Select(x => new
                {
                    id = x.Key,
                    images = x.Value,
                }),
                PlayersState = Template.RenderPartialToString("~/Partials/PlayersState.ascx", g),
                GameLog = string.Join("
", g.LogInfo),
            };
            return Json(jsonData);
        }



как сделать, чтобы можно было вложить один объект(который передаются из функции RenderGame ) в другой(который в Roll) и чтобы можно было на клиенте достучаться например по
data.MapInfo.Map
в Json не сильно шарю, так что можете попинать
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
function roll(n) {
    $.post("/Game/Roll",
            { roll: n },
            function (data) {
                //UpdateMap(data);
               data.MapInfo.Map
            });
}
...
Рейтинг: 0 / 0
Json, как правильно сделать
    #37832888
brainproof
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возвращать объект вида
class My
{
public MapInfo;
public ...
}
серилизовать в джейсон и вуаля, очевидно вроде
п.с. не люблю анонимные объекты (
var jsonData = new {};
...
Рейтинг: 0 / 0
Json, как правильно сделать
    #37832905
mnde
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brainproofвозвращать объект вида
class My
{
public MapInfo;
public ...
}
серилизовать в джейсон и вуаля, очевидно вроде
п.с. не люблю анонимные объекты (
var jsonData = new {};хотелось бы без создания новых объектов-заглушек

создаем анонимный объект, в качестве поля - возращаемая строка в Json формате из другого метода
...
Рейтинг: 0 / 0
Json, как правильно сделать
    #37832920
mnde
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mnde,

поправлюхотелось бы без создания новых классов-заглушек
...
Рейтинг: 0 / 0
Json, как правильно сделать
    #37832928
Фотография SanSYS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
   var jsonData = new
            {
                MapInfo = RenderGame(g),
                GameLog = string.Join("", g.LogInfo),

            };



Вынеси в отдельный метод и используй
И, кстати, вместо [AcceptVerbs(HttpVerbs.Post)] в MVC3 можно использовать HttpPost
И наверн не помешает доп. проверка Request.IsAjaxRequest(), раз все равно скриптами обращаешься
...
Рейтинг: 0 / 0
Json, как правильно сделать
    #37832947
mnde
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SanSYS
Код: c#
1.
2.
3.
4.
5.
6.
   var jsonData = new
            {
                MapInfo = RenderGame(g),
                GameLog = string.Join("", g.LogInfo),

            };




Вынеси в отдельный метод и используй
И, кстати, вместо [AcceptVerbs(HttpVerbs.Post)] в MVC3 можно использовать HttpPost
И наверн не помешает доп. проверка Request.IsAjaxRequest(), раз все равно скриптами обращаешься

как в отдельный?
мне надо использовать только анонимные объекты

как выше уже писал, есть dataJson = new {fild1 = здесь обязательно данные из другого метода, но желательно вернуть строкой в жсон формате, так как неохота(будет потом проблематично) создавать новый класс, чтобы явно задекларировать, что хочу вернуть}
...
Рейтинг: 0 / 0
Json, как правильно сделать
    #37832954
mnde
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и на будущее, кто аматар и не знает как сделать, желательно промолчать, мне именно нужно узнать как работать с жсоном на сервере, то есть сериализовать объект в строку и корректно передать на клиента
...
Рейтинг: 0 / 0
Json, как правильно сделать
    #37832970
brainproof
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RenderGame должен принципиально возвращаться строку? Делайте также анонимный объект встраивайте его в выше стоящий и серилизуйте.
...
Рейтинг: 0 / 0
Json, как правильно сделать
    #37832988
mnde
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brainproofRenderGame должен принципиально возвращаться строку? Делайте также анонимный объект встраивайте его в выше стоящий и серилизуйте.

хотелось бы вернуть из другого метода(но анонимные видны только в текущем методе)
как понимаю вариант один, вернуть как строку в жсон формате и присвоить полю корневого объекта, потом этот корневой сериализовать и послать клиенту(!!! интересует именно этот случай)
...
Рейтинг: 0 / 0
Json, как правильно сделать
    #37833005
brainproof
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mndebrainproofRenderGame должен принципиально возвращаться строку? Делайте также анонимный объект встраивайте его в выше стоящий и серилизуйте.

хотелось бы вернуть из другого метода(но анонимные видны только в текущем методе)
как понимаю вариант один, вернуть как строку в жсон формате и присвоить полю корневого объекта, потом этот корневой сериализовать и послать клиенту(!!! интересует именно этот случай)

ваш способ обречен так как вдумайтесь что пишите, вы вернете строку и присвоете её полю - это будет уже строка для дальнешего ипользования, так как эту строку дженсон заэкранирует при возврате поля MapInfo из Roll. На клиенте MapInfo будет в виде строки.
...
Рейтинг: 0 / 0
Json, как правильно сделать
    #37833025
mnde
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brainproofmndeпропущено...


хотелось бы вернуть из другого метода(но анонимные видны только в текущем методе)
как понимаю вариант один, вернуть как строку в жсон формате и присвоить полю корневого объекта, потом этот корневой сериализовать и послать клиенту(!!! интересует именно этот случай)

ваш способ обречен так как вдумайтесь что пишите, вы вернете строку и присвоете её полю - это будет уже строка для дальнешего ипользования, так как эту строку дженсон заэкранирует при возврате поля MapInfo из Roll. На клиенте MapInfo будет в виде строки.

може есть опция , типа указываешь что сериализованный объект и жсон сам корректно все делает

проблема то в чем, у меня в нескольких местах такой код и в каждом место вставлять код из RenderGame оч плохо, так как все раздуется, новый класс заводить тоже не охота, так как есть обходное решение
делать один анонимный корневой объект и возращать его, без присваиваний полям другого аноноимного объекта
...
Рейтинг: 0 / 0
Json, как правильно сделать
    #37833037
Фотография SanSYS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mnde, спокойно выносишь в отдельный метод возвращающий результат в виде Object или dynamic и не паришься
...
Рейтинг: 0 / 0
Json, как правильно сделать
    #37833049
mnde
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SanSYSmnde, спокойно выносишь в отдельный метод возвращающий результат в виде Object или dynamic и не паришьсячтобы вернуть обжект, надо все равно делкрировать класс


вроде так нельзя
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
object getChildData()
{
//............
return new {field1=blabla, field2=blabla}
}


 public ActionResult Roll(int roll)
        {
        // to do something

            var jsonData = new
            {
                MapInfo = getChildData(),
               
            };

            return Json(jsonData);

        }
...
Рейтинг: 0 / 0
Json, как правильно сделать
    #37833087
Фотография SanSYS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mnde, да объяви ты класс, я ровным счетом не вижу в этом ничего плохого
когда юзаешь var для анонимных типов - ты все равно объявляешь класс, только в CLR
Ты вообще смотрел в дизасемблере как в результате выглядят твои методы?
...
Рейтинг: 0 / 0
Json, как правильно сделать
    #37833095
Фотография SanSYS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mndeSanSYSmnde, спокойно выносишь в отдельный метод возвращающий результат в виде Object или dynamic и не паришьсячтобы вернуть обжект, надо все равно делкрировать класс


вроде так нельзя
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
object getChildData()
{
//............
return new {field1=blabla, field2=blabla}
}


 public ActionResult Roll(int roll)
        {
        // to do something

            var jsonData = new
            {
                MapInfo = getChildData(),
               
            };

            return Json(jsonData);

        }



Ах тыж салабон, я аж усомнился, мало ли как обновился сишарп, можно

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    internal class Program
    {
        private static void Main(string[] args)
        {
            Console.WriteLine(Test1());
            Console.WriteLine(Test2());
        }

        private static object Test1()
        {
            return new { TestName = "Test1", SomeField = 1 };
        }

        private static object Test2()
        {
            return new { TestName = "Test2", SomeOtherField = 1 };
        }
    }


выводит:

{ TestName = Test1, SomeField = 1 }
{ TestName = Test2, SomeOtherField = 1 }
Press any key to continue . . .
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Json, как правильно сделать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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