如何在没有[JsonIgnore]或[IgnoreDataMember]属性

时间:2016-06-08 14:05:49

标签: c# asp.net json asp.net-web-api properties

我想知道如何省略序列化的特定属性。 问题是我无法使用[JsonIgnore][IgnoreDataMember]属性,因为我需要将此属性显示在其他位置。

以下是我的服务模式

public class Event
{
    public long EventId { get; set; }
    public string EventName { get; set; }
    public DateTime? EventDate { get; set; }
    public string EventLocalization { get; set; }        
    public string EventImage { get; set; }
    public string EventUrl { get; set; }
    public string EventDescription { get; set; }
    public City City { get; set; }
}

public class City
{
    public int CityId { get; set; }
    public string CityName { get; set; }
    public State State { get; set; }
    public IEnumerable<Event> Events { get; set; }
}

当我从事件中请求JSON时,我会回到这样的事情:

[
  {
    "EventId": 1,
    "EventName": "Alalala",
    "EventDate": "2016-01-01T00:00:00",
    "EventLocalization": "Musialka",
    "EventImage": null,
    "EventUrl": null,
    "EventDescription": null,
    "City": {
      "CityId": 164,
      "CityName": "Opole",
      "State": {
        "StateId": 8,
        "StateName": "opolskie",
        "Cities": null
      },
      "Events": null
    },
    "Category": {
      "CategoryId": 1,
      "CategoryName": "Teatr i Opera"
    }
  }
]

这是循环。城市模型由事件导航属性组成,但是当我要求事件的JSON时,我不想再显示事件。我只想显示CityIdCityNameState属性。我无法在City模型中修饰IEnumerable<Event>属性,因为当我要求City JSON时,我需要此属性来返回事件列表。

我发现我可以使用3个属性创建另一个模型:CityIdCityNameState并将其作为属性包含在事件模型中而不是City属性中,但是包含50个模型这是一项相当庞大的工作。

我可以用其他方式解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我建议创建一个城市

    public class City 
    {
        public int CityId { get; set; }

        public string CityName { get; set; }

        public State State { get; set; }
    }

和一个CityWithEvents类

    public class CityWithEvents : City
    {
       public IEnumerable<Event> Events { get; set; }
    }

在课堂活动中,您需要存储对City类的引用,并且在任何时候如果您需要显示City Events,请初始化CityWithEvents类