如何使Web API以所需的格式返回JSON?
如何使Web API以所需的格式返回JSON?
我在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
}, {...}
}
问题的出现的原因:
提问者最初以为自己遇到了一个关于如何在Web API中返回JSON的问题,但后来意识到自己提出的问题是错误的。
解决方法:
1. 创建用于JSON的类。
2. 使用JavaScriptSerializer进行反序列化。
3. 使用AutoMapper进行映射。
以下是整理好的文章:
你可以尝试使用AutoMapper。
1. 为你的JSON创建类
在使用之前,你需要将JSON对象转换为C#类。可以尝试使用这个或这个。
如果你在定义类时遇到问题,下面是我认为适合你的代码。
第一个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; } }
2. 使用JavaScriptSerializer进行反序列化:
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); JsonClassA jsonClassA = jsonSerializer.Deserialize(jsonInput)
3. 使用AutoMapper进行映射:
假设你的第一个JSON表示类`JsonClassA`,第二个JSON表示类`JSONClassB`。
使用AutoMapper可以很容易地完成这个过程,并从你的控制器返回结果。
JSONClassB finalOutput = AutoMapper.CreateMap() .ForMember(dest => dest.prop1, opts => opts.MapFrom(src => src.propAAA)) .ForMember(dest => dest.prop2, opts => opts.MapFrom(src => src.propBBB)); return Ok(finalOutput);
看起来很棒。我来尝试一下这个解决方案。
你的解决方案是否类似于这个?stackoverflow.com/questions/21657122/...
.shedko 不,我看过你发的链接,那是一个完全不同的问题和答案。这个解决方案对你有用吗?
还没有尝试。我会告诉你的。
jsonInput应该是LINQ查询的结果(var result),对吗?
伙计们,非常感谢你们的帮助,但是我问错了问题。