如何创建 Json 响应并将 child object 添加到每个 parent object
How to create Json Response with append child object to each it's parent object
Table1: [Building]([ID] [uniqueidentifier] NOT NULL,
[BuildingCode] [varchar](50) NULL,
[Name] [varchar](max) NULL,
[RoleID] [uniqueidentifier] NOT NULL, )
第二个tablechildtable设计很像
Table2: [Role](
[RoleID] [uniqueidentifier] NOT NULL,
[Name] [varchar](max) NULL)
现在,我希望响应来自:
BuildingCode1
{
RoleId:16C6BEA4-421A-4718-8B85-090FC2FD8BCF
Name:Role Name 1
},
BuildingCode2
{
RoleId:2HJ44A4-621A-A718-8B85-P90FC2FD8BCF
Name:Role Name 2
},
BuildingCode3
{
RoleId:KJL34J8-621A-A718-8B85-3FH39DKF48
Name:Role Name 3
}
对于 table 1 中的每个建筑代码,从 table 2(角色)中获取相关的 Roleid 详细信息。请帮忙我怎样才能得到这种回应。提前致谢
为此,我创建了 2 类
public class BCode_Role
{
public RoleTable[] BuildingCode { get; set; }
public byte Status { get; set; }
}
public class RoleTable
{
public Guid RoleID { get; set; }
public string Name { get; set; }
}
return json 的方法是
public Bcode_Role BuldingDetail()
{
var result = new BuildingCode_Role();
var dbBuildingCods = _context.Building.Select(x => x.Code);
var dbRoles = _context.Role;
var apiModels = dbRoles.Select(x => new RoleTable {RoleID= x.ID, Name = x.Name }).ToArray();
result.BuildingCode = apiModels;
return result;
}
形成这个我得到这个Json输出
{
"buildingCode": [
{
"roleID": "0f752579-57cc-4266-a4b4-4759af97525e",
"name": "Role 2"
},
{
"roleID": "1914a479-cb75-48b9-b5c3-6792acfba7b3",
"name": "Role 1"
},
{
"roleID": "3bc21132-079d-4ab9-b9f5-fe2428a281f1",
"name": "Role 3"
}
],
"status": 0
}
其实我想要
{
"buildingCode1": {
"roleID": "0f752579-57cc-4266-a4b4-4759af97525e",
"name": "Role 2"
},
"buildingCode"2: {
"roleID": "1914a479-cb75-48b9-b5c3-6792acfba7b3",
"name": "Role 1"
},
"buildingCode"3: {
"roleID": "3bc21132-079d-4ab9-b9f5-fe2428a281f1",
"name": "Role 3"
},
}
为了实现这一点,我建议您将 BCode_Role class 更改如下
public class BCode_Role
{
[JsonProperty("buildingCode")]
[JsonExtensionData]
public IDictionary<string,object> BuildingCode{get;set;}
public byte Status { get; set; }
}
public class RoleTable
{
[JsonProperty("roleID")]
public Guid RoleID { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
}
然后在您的 BuldingDetail 方法中,
public Bcode_Role BuldingDetail()
{
var result = new BuildingCode_Role();
var dbBuildingCods = _context.Building.Select(x => x.Code);
var dbRoles = _context.Role;
var apiModels = dbRoles.Select(x => x).AsEnumerable().Select((x,index) => new {Key = $"{nameof(BCode_Role1.BuildingCode)}{index}", Value = (object)new RoleTable {RoleID= x.ID, Name = x.Name }}).ToDictionary(x=>x.Key,y=>y.Value);
result.BuildingCode = apiModels;
return result;
}
序列化结果会得到
{
"Status": 0,
"BuildingCode0": {
"roleID": "0f752579-57cc-4266-a4b4-4759af97525e",
"name": "Role 2"
},
"BuildingCode1": {
"roleID": "1914a479-cb75-48b9-b5c3-6792acfba7b3",
"name": "Role 1"
},
"BuildingCode2": {
"roleID": "3bc21132-079d-4ab9-b9f5-fe2428a281f1",
"name": "Role 3"
}
}
Table1: [Building]([ID] [uniqueidentifier] NOT NULL,
[BuildingCode] [varchar](50) NULL,
[Name] [varchar](max) NULL,
[RoleID] [uniqueidentifier] NOT NULL, )
第二个tablechildtable设计很像
Table2: [Role](
[RoleID] [uniqueidentifier] NOT NULL,
[Name] [varchar](max) NULL)
现在,我希望响应来自:
BuildingCode1
{
RoleId:16C6BEA4-421A-4718-8B85-090FC2FD8BCF
Name:Role Name 1
},
BuildingCode2
{
RoleId:2HJ44A4-621A-A718-8B85-P90FC2FD8BCF
Name:Role Name 2
},
BuildingCode3
{
RoleId:KJL34J8-621A-A718-8B85-3FH39DKF48
Name:Role Name 3
}
对于 table 1 中的每个建筑代码,从 table 2(角色)中获取相关的 Roleid 详细信息。请帮忙我怎样才能得到这种回应。提前致谢 为此,我创建了 2 类
public class BCode_Role
{
public RoleTable[] BuildingCode { get; set; }
public byte Status { get; set; }
}
public class RoleTable
{
public Guid RoleID { get; set; }
public string Name { get; set; }
}
return json 的方法是
public Bcode_Role BuldingDetail()
{
var result = new BuildingCode_Role();
var dbBuildingCods = _context.Building.Select(x => x.Code);
var dbRoles = _context.Role;
var apiModels = dbRoles.Select(x => new RoleTable {RoleID= x.ID, Name = x.Name }).ToArray();
result.BuildingCode = apiModels;
return result;
}
形成这个我得到这个Json输出
{
"buildingCode": [
{
"roleID": "0f752579-57cc-4266-a4b4-4759af97525e",
"name": "Role 2"
},
{
"roleID": "1914a479-cb75-48b9-b5c3-6792acfba7b3",
"name": "Role 1"
},
{
"roleID": "3bc21132-079d-4ab9-b9f5-fe2428a281f1",
"name": "Role 3"
}
],
"status": 0
}
其实我想要
{
"buildingCode1": {
"roleID": "0f752579-57cc-4266-a4b4-4759af97525e",
"name": "Role 2"
},
"buildingCode"2: {
"roleID": "1914a479-cb75-48b9-b5c3-6792acfba7b3",
"name": "Role 1"
},
"buildingCode"3: {
"roleID": "3bc21132-079d-4ab9-b9f5-fe2428a281f1",
"name": "Role 3"
},
}
为了实现这一点,我建议您将 BCode_Role class 更改如下
public class BCode_Role
{
[JsonProperty("buildingCode")]
[JsonExtensionData]
public IDictionary<string,object> BuildingCode{get;set;}
public byte Status { get; set; }
}
public class RoleTable
{
[JsonProperty("roleID")]
public Guid RoleID { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
}
然后在您的 BuldingDetail 方法中,
public Bcode_Role BuldingDetail()
{
var result = new BuildingCode_Role();
var dbBuildingCods = _context.Building.Select(x => x.Code);
var dbRoles = _context.Role;
var apiModels = dbRoles.Select(x => x).AsEnumerable().Select((x,index) => new {Key = $"{nameof(BCode_Role1.BuildingCode)}{index}", Value = (object)new RoleTable {RoleID= x.ID, Name = x.Name }}).ToDictionary(x=>x.Key,y=>y.Value);
result.BuildingCode = apiModels;
return result;
}
序列化结果会得到
{
"Status": 0,
"BuildingCode0": {
"roleID": "0f752579-57cc-4266-a4b4-4759af97525e",
"name": "Role 2"
},
"BuildingCode1": {
"roleID": "1914a479-cb75-48b9-b5c3-6792acfba7b3",
"name": "Role 1"
},
"BuildingCode2": {
"roleID": "3bc21132-079d-4ab9-b9f5-fe2428a281f1",
"name": "Role 3"
}
}