Атрибут JsonIgnore не работает для одного свойства объекта ASP.NET MVC - PullRequest
0 голосов
/ 04 июня 2018

У меня есть такая простая сущность в моем проекте ASP.NET MVC:

public class Folder : EntityData
{
    public Folder()
    {
        IsStub = false;
    }

    [StringLength(300)]
    public string Name { get; set; }

    [JsonIgnore]
    public bool IsStub { get; set; }

    [ForeignKey("ParentFolderObj")]
    public string ParentFolder { get; set; }

    [JsonIgnore]
    public Folder ParentFolderObj { get; set; }

    [JsonIgnore]
    public virtual ICollection<DesktopFolder> DesktopFolders { get; set; }
    [JsonIgnore]
    public virtual ICollection<UserFolder> UserFolders { get; set; }
}

EntityData - это класс, предоставляемый MobileAppServices SDK Azure:

public abstract class EntityData : ITableData
{
    protected EntityData();

    [Key]
    [TableColumn(TableColumnType.Id)]
    public string Id { get; set; }
    [TableColumn(TableColumnType.Version)]
    [Timestamp]
    public byte[] Version { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Index(IsClustered = true)]
    [TableColumn(TableColumnType.CreatedAt)]
    public DateTimeOffset? CreatedAt { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    [TableColumn(TableColumnType.UpdatedAt)]
    public DateTimeOffset? UpdatedAt { get; set; }
    [TableColumn(TableColumnType.Deleted)]
    public bool Deleted { get; set; }
}

В моем сериализованномНапример, когда я получаю все свои папки, я все равно вижу поле «IsStub», даже если оно помечено как [JsonIgnore].

Я использую Newtonsoft.Json для (де-) сериализации со следующими конфигурациямикоторые применяются ко всему проекту и настраиваются при загрузке:

HttpConfiguration config = new HttpConfiguration();
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);

Как видите, есть другие поля [JsonIgnore], которые правильно не присутствуют в ответе, который выглядит следующим образом:

{
  "deleted": false,
  "updatedAt": null,
  "createdAt": "2018-06-03T06:13:31.66Z",
  "version": "AAAAAAAACJc=",
  "id": "042d81b8-4599-43ec-b462-8cbaf6ecd672",
  "parentFolder": null,
  "isStub": false,
  "name": "Folder636636104113385950"
}

Как сделать так, чтобы поле "IsStub" исчезло из моего ответа?

Я также попытался пометить поле как [ScriptIgnore], но безуспешно.

1 Ответ

0 голосов
/ 09 июля 2018

Добавьте в свой класс " EntityData " следующее:

public virtual bool ShouldSerializeIsStub()
{
  return true;
}

Перезапишите функцию в своем классе " Папка " следующим образом:

public override bool ShouldSerializeIsStub()
{
  return false;
}

[JsonIgnore] «тег» (это тег?) Правильный.Остальное в порядке.Это прекрасно работает для меня.Я надеюсь, он сделает то же самое для вас.

...