如何使web api以所需格式返回json?

如何使web api以所需格式返回json?,json,asp.net-web-api,Json,Asp.net Web Api,我在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/Grafi

我在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);
    }
如何更改web api控制器代码以获得此json:

{
    "$id": "1",
    "kodg": -1643387437,
    "name": null,
    "data": "2014-02-07T00:00:00",
    "pax": 2,
    "ch": 0
    }, {...}
}

创建一个DTO类,该类具有需要返回的确切结构。然后将
result
上项目的结构映射到
PhuketDTO
,并将DTO列表分配到
Ok
,就像当前对
result

所做的那样,创建一个具有需要返回的确切结构的DTO类。然后将
result
上的项目结构映射到
PhuketDTO
,并将DTO列表分配到
Ok
,就像当前对
result

所做的那样,您可以尝试使用

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.使用JavaScriptSerialize反序列化: 你可以试试使用

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.使用JavaScriptSerialize反序列化:
Claudio,我的背景是基于vb.net和linq的,如果你能给出任何这样的例子,我将不胜感激。@andrey.shedko:检查json的结构,你需要将其转换为C#类结构。如果你在这方面有困难,再来找我,我很乐意帮助你。老实说,是的,我在这方面有困难。克劳迪奥,我的背景是基于vb.net和linq的,所以如果你能给出任何这样的例子,我将不胜感激。@andrey.shedko:检查json的结构,你需要返回一个翻译为C#类结构的json。如果你在这方面有困难,再来找我,我很乐意帮忙。老实说,是的,我在这方面有困难。这看起来很棒。让我试试这个解决方案。你的解决方案和这个类似吗@andrey.shedko不,我看到了你发布的链接,这是一个完全不同的问题和答案。此解决方案对您有效吗?尚未尝试。我会让你们知道的。jsonInput应该是LINQ查询的结果(var结果),对吗?这看起来很棒。让我试试这个解决方案。你的解决方案和这个类似吗@andrey.shedko不,我看到了你发布的链接,这是一个完全不同的问题和答案。此解决方案对您有效吗?尚未尝试。我会让你们知道的。jsonInput应该是LINQ查询的结果(var结果),对吗?
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 );