我需要帮助从网络Api获取数据。我使用EF和两个名为" Reichweites"和"积分"(孩子)
这是我的DTO课程:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace xms_ef_vers1.Models
{
public class ReichweitePointsDto
{
public ReichweitePointsDto() { }
public ReichweitePointsDto(Reichweite reichweite)
{
ReichweiteID = reichweite.Id;
Name = reichweite.Name;
Potenzial = reichweite.Potenzial;
Geschlecht = reichweite.Geschlecht;
CPGRP = reichweite.CpGRP;
ZielGRP = reichweite.ZielGRP;
Benutzer = reichweite.Benutzer;
PointListe = new List<PointListDto>();
foreach (Points item in reichweite.PointListe)
{
PointListe.Add(new PointListDto(item));
}
}
[Key]
public int ReichweiteID { get; set; }
public string Name { get; set; }
//[Required]
public int Potenzial { get; set; }
//[Required]
public string Geschlecht { get; set; }
//[Required]
public int CPGRP { get; set; }
public int ZielGRP { get; set; }
public string Benutzer { get; set; }
public virtual List<PointListDto> PointListe { get; set; }
public Reichweite ToEntity()
{
Reichweite reich = new Reichweite
{
Id = ReichweiteID,
Name = Name,
Potenzial = Potenzial,
Geschlecht = Geschlecht,
CpGRP = CPGRP,
ZielGRP = ZielGRP,
Benutzer = Benutzer,
PointListe = new List<Points>()
};
foreach (PointListDto item in PointListe)
{
reich.PointListe.Add(item.ToEntity());
}
return reich;
}
}
}
我的数据模型:
1:n关系
主表是Reichweites
子表是积分
我想以这种格式提供数据:
[
{
"User":"testuser",
"CPGRP":21321321,
"Sex":"men",
"Name": "test",
"Potenzial":213213,
"ReichweiteID":0,
"ZielGRP": 21321321
"PointList":[
{
"Cost_I_Rea":"22202771.01",
"Cost_TV":"213213210.0" ,
"GRP":10,
"ID":0,
"ReichweiteID_F":1,
"RW_TV":"9.603",
"RW_Zuwgs":"9.603",
},
{
"Cost_I_Rea":"22202771.01",
"Cost_TV":"213213210.0" ,
"GRP":10,
"ID":0,
"ReichweiteID_F":1,
"RW_TV":"9.61103",
"RW_Zuwgs":"9.6043",
},
{
"Cost_I_Rea":"22202771.01",
"Cost_TV":"213213210.0" ,
"GRP":10,
"ID":0,
"ReichweiteID_F":1,
"RW_TV":"9.61103",
"RW_Zuwgs":"9.6043",
},
{
"Cost_I_Rea":"22202771.01",
"Cost_TV":"213213210.0" ,
"GRP":10,
"ID":0,
"ReichweiteID_F":1,
"RW_TV":"9.61103",
"RW_Zuwgs":"9.6043",
}
]
}
]
一些额外的要求是我必须通过id和用户名来适应。
这是我现在尝试的方法,但它不起作用。
你需要更好地理解我的问题?
[的responseType(typeof运算(Reichweite1Dto))]
public async Task<IHttpActionResult> GetReichweite(int id)
{
var reich = await db.Points.Include(b => b.ReichweiteId)
.Select(b =>
new ReichweitePointsDto ()
{
Benutzer = b.Reichweite.Benutzer,
Name = b.Reichweite.Name,
Geschlecht = b.Reichweite.Geschlecht,
CPGRP = b.Reichweite.CpGRP,
Potenzial = b.Reichweite.Potenzial,
ZielGRP = b.Reichweite.ZielGRP,
PointListe = (from item in reich
select new Points()
{
GRP = item.GRP,
RW_TV = item.RW_TV,
Cost_TV = item.Cost_TV,
Rw_ZuWGS = item.RW_Zuwgs,
Cost_I_Rea = item.Cost_I_Rea,
}).ToList()
};
return reich;
}
答案 0 :(得分:1)
是的我拥有它。关键是保持简单。非常感谢Scott。
现在我的方法工作正常,并提供我想要的Json格式的数据!
这里的方法:
namespace xms_ef_vers1.Controllers
{
public class TVKurveController : ApiController
{
private ReichweitenKurveContext db = new ReichweitenKurveContext();
// GET api/TVKurve/5
public IHttpActionResult GetReichweite(int id)
{
var obj = db.Reichweites.Where(r => r.Id == id && r.Benutzer == user.identity.name);
return Ok(obj);
}
/////////////////////
// GET api/TVKurve
[ResponseType(typeof(ReichweitePointsDto))]
public IEnumerable<Reichweite> GetReichweite()
{
var obj = db.Reichweites.Take(100);
return obj;
}
}
}
WebApiConfig.cs中缺少某人:
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling =
Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
以下是结果如何:
[
{
"$id": "1",
"PointListe": [
{
"$id": "2",
"Reichweite": {
"$ref": "1"
},
"Id": 2771,
"GRP": 10,
"RW_TV": 1000,
"Cost_TV": 15600,
"Rw_ZuWGS": 1000,
"Cost_I_Rea": 15.6,
"ReichweiteId": 21
},
{
"$id": "3",
"Reichweite": {
"$ref": "1"
},
"Id": 2772,
"GRP": 20,
"RW_TV": 2000,
"Cost_TV": 31200,
"Rw_ZuWGS": 1000,
"Cost_I_Rea": 15.6,
"ReichweiteId": 21
},
{
"$id": "4",
"Reichweite": {
"$ref": "1"
},
"Id": 2773,
"GRP": 30,
"RW_TV": 3500,
"Cost_TV": 46800,
"Rw_ZuWGS": 1500,
"Cost_I_Rea": 10.4,
"ReichweiteId": 21
},
{
"$id": "5",
"Reichweite": {
"$ref": "1"
},
"Id": 2774,
"GRP": 40,
"RW_TV": 4500,
"Cost_TV": 62400,
"Rw_ZuWGS": 1000,
"Cost_I_Rea": 15.6,
"ReichweiteId": 21
}
],
"Id": 21,
"Name": "Short Curve",
"Potenzial": 132132132,
"Geschlecht": "men",
"CpGRP": 1560,
"ZielGRP": 1560,
"Benutzer": "admin"
}
]
也许你可以告诉我“$ id”和“$ ref”是什么。
最好,非常感谢
答案 1 :(得分:0)
如果我理解正确形成您的评论,您说您已经获得了所有数据 - 您只需将其转换为JOSN
简单只需更改控制器操作表单的最后一行:
return reich;
为:
return this.Json(reich);
MVC和WebApi内置了JSON序列化程序
试试这个:
public IHttpActionResult GetReichweite(int id)
{
var obj = db.Points.Take(100);
return Ok(obj);
}
应该简化事情