C#WebApi 2。JSON序列化。从分部类中排除属性

C#WebApi 2。JSON序列化。从分部类中排除属性,c#,json,entity-framework,serialization,asp.net-web-api2,C#,Json,Entity Framework,Serialization,Asp.net Web Api2,我正在使用EntityFramework6构建一个DB模型。 我还使用JSON在web Api 2上构建了web服务 我的主要分部类定义如下所示: (由EF生成(来自DB的第一个代码),所以我不想在这里存储太多更改) 那是我的动物管理员: public IHttpActionResult GetAnimals(long id) { Animal animal = (from an in db.Animal where a.AnimalId =

我正在使用EntityFramework6构建一个DB模型。 我还使用JSON在web Api 2上构建了web服务

我的主要分部类定义如下所示: (由EF生成(来自DB的第一个代码),所以我不想在这里存储太多更改)

那是我的动物管理员:

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模型在另一个项目中,WebService在另一个项目中,所以我通过引用将DB模型链接到WebService

我的register类与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
            };
    }

我认为您正在寻找[JsonIgnore]作为默认XML序列化程序,或者[IgnoreDataMember]作为默认XML序列化程序

但我可以在您的代码中看到您正在使用[DataContract],您肯定也可以这样做:

[DataContract]
public class YourClass
{
    [DataMember]
    public int Id { get; set; }
    [DataMember]
    public string Prop1 { get; set; }

    //ignored
    public string IgnoredProp { get;set; }
}

你试过[未映射]吗?@MMK:是的。但是没有成功。[ScriptIgnore(ApplyToOverrides=true)]您在哪里发现应该使用
[IgnoreDataMember]
[ScriptIgnore]
?两者都不适用于WebAPI的默认JSON序列化程序,即Newtonsoft.JSON。@CodeCaster:我认为我写得很清楚,我没有使用Newtonsoft.JSON。我没有使用JSON.NET,我使用的是DataContractJsonSerializer。所以我不能告诉我们e[JsonIgnore]。至于第二部分,如您所见,在分部类中,我没有[DataMember]属性。
    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
            };
    }
[DataContract]
public class YourClass
{
    [DataMember]
    public int Id { get; set; }
    [DataMember]
    public string Prop1 { get; set; }

    //ignored
    public string IgnoredProp { get;set; }
}