我在web api中使用以下代码返回json:
所以,这是dto类。但目前尚不清楚如何将其映射到结果。
public class grafikresult
{
int kodg { get; set; }
string name { get; set; }
DateTime data { get; set; }
byte pax { get; set; }
byte ch { get; set; }
}
这是控制器代码:
// GET api/Grafik/5
public IHttpActionResult GetGrafik(int id)
{
PhuketEntities db = new PhuketEntities();
xTourist t = db.xTourist.Find(id);
var result = from a in db.Grafik
join b in db.Exc on a.Excursion equals b.Kod
join c in db.Dates on a.Kodd equals c.kodd
join d in db.Staff on a.Guide equals d.Kod
where c.Date > t.ArrDate && c.Дата < t.DepDate
select new { kodg = a.Kodg, name = d.Name, data = c.Date, pax = t.Pax, ch = t.Child };
return Ok(result);
}
这样会返回新的json:
{
"$id": "1",
"$values": [{
"$id": "2",
"kodg": -1643387437,
"name": null,
"data": "2014-02-07T00:00:00",
"pax": 2,
"ch": 0
}, {...}]
}
如何更改web api控制器代码才能获得此json:
{
"$id": "1",
"kodg": -1643387437,
"name": null,
"data": "2014-02-07T00:00:00",
"pax": 2,
"ch": 0
}, {...}
}
答案 0 :(得分:3)
您可以尝试使用AutoMapper。
在使用之前,您需要将JSON对象转换为C#类。试试this或this。
如果您在定义课程时遇到问题,我认为应该适合您。
第一个json的类。
public class JsonClassA
{
int id{ get; set; }
Details values { get; set; }
}
public class Details
{
int kodg { get; set; }
string name { get; set; }
DateTime data { get; set; }
byte pax { get; set; }
byte ch { get; set; }
}
第二个json的等级。
public class JSONClassB
{
int kodg { get; set; }
string name { get; set; }
DateTime data { get; set; }
byte pax { get; set; }
byte ch { get; set; }
}
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
JsonClassA jsonClassA = jsonSerializer.Deserialize<JsonClassA>(jsonInput)
假设您的第一个Json代表类JsonClassA
,而您的第二个JSON代表类JSONClassB
。
使用Automapper,可以按照以下方式轻松完成,并从控制器返回。
JSONClassB finalOutput = AutoMapper.CreateMap<JsonClassA, JSONClassB>()
.ForMember(dest => dest.prop1, opts => opts.MapFrom(src => src.propAAA))
.ForMember(dest => dest.prop2, opts => opts.MapFrom(src => src.propBBB));
return Ok(finalOutput );
答案 1 :(得分:2)
创建一个具有您需要返回的确切结构的DTO类。然后,您可以将result
上的项目结构映射到PhuketDTO
,并将DTO列表分配给Ok
,就像您目前为result
所做的那样。