我正在使用Entity Framework 6来构建数据库模型。 我还使用JSON编写了基于Web Api 2的Web服务..
我的主要部分类定义如下: (从EF生成(来自数据库的第一个代码)所以我不想在这里存储太多变化)
public partial class Animal
{
[Key]
[Column(Order = 0)]
public long AnimalId { get; set; }
[Key]
[Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long SpeciesId { get; set; }
[Key]
[Column(Order = 2)]
public string AnimalName{ get; set; }
public string AnimalDescription{ get; set; }
public List<AnimalTags> AnimalTags= new List<AnimalTags>();
}
我还有另外一个带有一些其他属性的部分课程,我不想通过Web Api展示。
public partial class Animal
{
[JsonIgnore]
public bool IsNew { get; set; } = false;
[JsonIgnore]
public bool IsChanged { get; set; } = false;
}
那是我的AnimalController:
public IHttpActionResult GetAnimals(long id)
{
Animal animal = (from an in db.Animal
where a.AnimalId == id
select a).FirstOrDefault();
animal.AnimalsTags= db.AnimalTags.Where(at=> at.AnimalId == animal.AnimalId).ToList();
if (animal == null)
{
return NotFound();
}
return Ok(animal);
}
我已在SO和MSDN上检查了所有建议的解决方案,但这些属性无效。 也许我在其他地方犯了错误?
感谢您的帮助。
编辑: DB Model在其他项目中,而WebService在另一个项目中,所以我通过Reference将DB Model链接到WebService。
我的注册类与Newtonsoft.Json的关系如何:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DataApi",
routeTemplate: "api/{controller}/{Id}",
defaults: new { Id = RouteParameter.Optional }
);
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
config.Formatters.JsonFormatter.SerializerSettings =
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
Formatting = Formatting.Indented
};
}
答案 0 :(得分:0)
我认为您正在为Json serializer或[IgnoreDataMember]寻找默认XML序列化程序的[JsonIgnore]。
但是我可以在你的代码中看到你正在使用[DataContract],你也可以这样做:
[DataContract]
public class YourClass
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Prop1 { get; set; }
//ignored
public string IgnoredProp { get;set; }
}