Member 14153700 Ответов: 2

Как вернуть несколько объектов из web-api?


получить заполненный регион (параметр url): http://host:port/regions?type=filled

метод get

Ответ 200 в виде массива (application/json):

[{regionobject},{…}…]
структура regionobject:
{region_id : значение,
region_name : значение,
region_fullname : значение,
region_type : valuee
region_misc : значение,
проекты: [{projectobject},{…}…]}

структура projectobject:
{project_id : значение,
project_name : значение,
project_code : значение,
project_description : значение,
region_id : значение, (чтобы избежать избыточности)
epsg : значение,
разделы : [{sectionobject},{…}…]}

структура sectionobject:
{section_id : значение,
section_name : значение,
section_description : значение,
полеты: [{flightobject},{…}…]}

структура flightobject :
{flight_id : значение,
flight_misc : значение,
flight_time : значение,
user_id : значение,
section_id : значение,
flight_pictures_quantity : значение,
flight_zip_filesize_mb : значение,
процессы : [{processobject},{…}…],
услуги : [{serviceobject},{…}…]}

Что я уже пробовал:

Я пытался использовать эти данные, но, к сожалению, это не работает для меня. теперь я совершенно пуст, и любое руководство по этому вопросу будет оценено по достоинству.

2 Ответов

Рейтинг:
1

Member 14153700

public partial class Regions
    {
        public Regions()
        {
            Projects = new HashSet<Projects>();
            RegionUserRelation = new HashSet<RegionUserRelation>();
        }

        public int RegionId { get; set; }
        [Required]
        public string RegionName { get; set; }
        [Required]
        public string RegionFullname { get; set; }
        [Required]
        public int RegionTypeId { get; set; }
        public string RegionMisc { get; set; }

        public RegionType RegionType { get; set; }
        public ICollection<Projects> Projects { get; set; }
        public ICollection<RegionUserRelation> RegionUserRelation { get; set; }
    }

public partial class Projects
    {
        public Projects()
        {
            Sections = new HashSet<Sections>();
        }

        public Guid ProjectId { get; set; }
        [Required]
        public string ProjectName { get; set; }
        [Required]
        public string ProjectCode { get; set; }
        public string ProjectDesc { get; set; }
        [Required]
        public int RegionId { get; set; }
        [Required]
        public int EpsgId { get; set; }

        public Epsg Epsg { get; set; }
        public Regions Region { get; set; }
        public ICollection<Sections> Sections { get; set; }
    }


public partial class Sections
    {
        public Sections()
        {
            Flights = new HashSet<Flights>();
        }

        public Guid SectionId { get; set; }
        [Required]
        public string SectionName { get; set; }
        public string SectionDesc { get; set; }
        [Required]
        public Guid ProjectId { get; set; }

        public Projects Project { get; set; }
        public ICollection<Flights> Flights { get; set; }
    }



Ожидаемый результат

{ "Regions" : 
  [ { 
        "region_id" : "2012",
        "region_name" : "region1",
        "region_fullname" : "21700",
        "region_type" : "MERCH",
            "Projects" : [ 
               {     "project_id" : 2341,
                     "project_name " : "DXY",
                     "project_code " : "21700",
                     "sections" : [
                                { "section_id" : 4356,
                                "section_name" : sec_name,
                                "section_description" : sec_dis},
                                { "section_id" : 476,
                                "section_name" : sec_name2,
                                "section_description" : sec_dis2},
                                { "section_id" : 908,
                                "section_name" : sec_name3,
                                "section_description" : sec_dis3}
                            ]
                },
            "Projects" : [ 
               {     "project_id" : 1321,
                     "project_name " : "Proj_2",
                     "project_code " : "01700",
                     "sections" : [
                                { "section_id" : 4356,
                                "section_name" : sec_name,
                                "section_description" : sec_dis},
                                { "section_id" : 476,
                                "section_name" : sec_name2,
                                "section_description" : sec_dis2},
                                { "section_id" : 908,
                                "section_name" : sec_name3,
                                "section_description" : sec_dis3}
                            ]
                },
            ]
  },
  { 
        "region_id" : "2013",
        "region_name" : "region3",
        "region_fullname" : "21330",
        "region_type" : "MERCH",
            "Projects" : [ 
               {     "project_id" : 2341,
                     "project_name " : "DXY",
                     "project_code " : "21700",
                     "sections" : [
                                { "section_id" : 4356,
                                "section_name" : sec_name,
                                "section_description" : sec_dis},
                                { "section_id" : 476,
                                "section_name" : sec_name2,
                                "section_description" : sec_dis2},
                                { "section_id" : 908,
                                "section_name" : sec_name3,
                                "section_description" : sec_dis3}
                            ]
                },
            "Projects" : [ 
               {     "project_id" : 1321,
                     "project_name " : "Proj_2",
                     "project_code " : "01700",
                     "sections" : [
                                { "section_id" : 4356,
                                "section_name" : sec_name,
                                "section_description" : sec_dis},
                                { "section_id" : 476,
                                "section_name" : sec_name2,
                                "section_description" : sec_dis2},
                                { "section_id" : 908,
                                "section_name" : sec_name3,
                                "section_description" : sec_dis3}
                            ]
                },
            ]
  },
  { 
        "region_id" : "2012",
        "region_name" : "region2",
        "region_fullname" : "24300",
        "region_type" : "MERCH",
            "Projects" : [ 
               {     "project_id" : 2341,
                     "project_name " : "DXY",
                     "project_code " : "21700",
                     "sections" : [
                                { "section_id" : 4356,
                                "section_name" : sec_name,
                                "section_description" : sec_dis},
                                { "section_id" : 476,
                                "section_name" : sec_name2,
                                "section_description" : sec_dis2},
                                { "section_id" : 908,
                                "section_name" : sec_name3,
                                "section_description" : sec_dis3}
                            ]
                },
            "Projects" : [ 
               {     "project_id" : 1321,
                     "project_name " : "Proj_2",
                     "project_code " : "01700",
                     "sections" : [
                                { "section_id" : 4356,
                                "section_name" : sec_name,
                                "section_description" : sec_dis},
                                { "section_id" : 476,
                                "section_name" : sec_name2,
                                "section_description" : sec_dis2},
                                { "section_id" : 908,
                                "section_name" : sec_name3,
                                "section_description" : sec_dis3}
                            ]
                },
            ]
  },
] }


Рейтинг:
0

Garth J Lancaster

Ну, если я работаю над REST API и у меня есть контроль, я обычно моделирую данные как классы C# POCO и имею "корневой" класс, содержащий иерархию данных.

Затем я обычно сериализую классы C# из "корневого" класса в JSON. Это означает, что я могу справиться со сложностью, если мне нужно - я избегаю рекурсии, например, сглаживая данные настолько, насколько могу

Если я иду другим путем, то есть потребляю чей-то JSON, я обычно использую json2csharp, подаю json и получаю структуру C#, построенную для меня, что довольно хорошо дает мне "корневой" класс для начала.

(и иногда я делаю оба способа, чтобы перепроверить и убедиться, что то, что у меня есть, пригодно для использования)

json2csharp, кажется, не работает в данный момент, доменное имя истекло?, но это полезный сайт

В вашем случае в вашем контроллере, и в зависимости от того, откуда берутся ваши данные, я бы, возможно,

class RegionObject 
{
	string region_id {get; set;}
	region_name {get; set;}
	region_fullname {get; set;}
	region_type {get; set;}
	region_misc {get; set;}
	// List<Project> projects {get; set;}
}

public class RootData
{
    public List<RegionObject> regions { get; set; }
    public ProjectObject project { get; set; }
...
}

RootData root = new RootData();

RegionObject region = new RegionObject();
region.region_id = "some value";
...
region.region_misc = "some value";

root.regions.Add(region);
// Add more regions

string output = JsonConvert.SerializeObject(root);



Это поможет ?


Member 14153700

@Гарт Джей Ланкастер. Могу ли я получить решение? я перепробовал много вещей, но это не сработало для меня

Garth J Lancaster

Я немного расширил этот пример, но вы не показали никакого собственного кода и не указали, откуда берутся ваши данные, так что это почти все, что я могу/готов сделать

Member 14153700

Я пытаюсь проанализировать возможный способ достижения такого результата. значения берутся из таблиц базы данных.. архитектор есть много регионов и каждый регион имеет много
проекты, которые, в свою очередь, имеет много в нем раздел [{region_id : значение, region_name : значение, region_fullname : значение, region_type : значение, region_misc : стоимость, проекты: [{project_id : значение,
project_name : значение,
project_code : значение,
project_description : значение,
region_id : значение,
epsg : значение,
разделы : [{ИД:значение},{имя : значение}] разделы:[{ИД :значение},{имя:значение}]

Garth J Lancaster

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

[{regionobject},{…}…]
regionobject structure:
{region_id : value,
region_name : value,
region_fullname : value,
region_type : valuee
region_misc : value,
projects: [{projectobject},{…}…]}


Будет два домена данных,

/api/регионы
/api/проекты

а затем, возможно, агрегатор, который возвращает объединенный "набор"

Member 14153700

Ниже приведена структура таблицы и ожидаемый результат @Garth J Lancaster