C#WebApi 2. JSON序列化。从部分类

时间:2016-12-20 12:20:16

标签: c# json entity-framework serialization asp.net-web-api2

我正在使用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
            };
    }

1 个答案:

答案 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; }
}