asp.net MVC 4 - Как вернуть меньше данных для сериализации? - PullRequest
0 голосов
/ 25 февраля 2019

Я новичок в asp.net MVC4 и у меня проблема с сериализацией всего набора данных.

Когда я возвращаю этот набор данных, например.db.Prestations.ToList() и позвоните моей конечной точке в Почтальон, запрос занимает много времени и не отвечает.

Если я помещаю результат db.Prestations.ToList() в переменную и выкидываю исключение после, я получаю исключение в своем запросе.

Так что, похоже, это проблема сериализации, например,возвращенные данные слишком велики.

У меня вопрос, как мне удалить ненужные мне объекты в моем Prestations?

Вот моя модель, а я не хочучтобы вернуть три Hashsets, как я могу это сделать?

namespace Uphair.EfModel
{
using System;
using System.Collections.Generic;

public partial class Prestation
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Prestation()
    {
        this.PartenairePrestations = new HashSet<PartenairePrestation>();
        this.PrixDureeOptions = new HashSet<PrixDureeOption>();
        this.LigneReservations = new HashSet<LigneReservation>();
    }

    public int IdPrestation { get; set; }
    public string NomPrestation { get; set; }
    public int Categorie { get; set; }
    public Nullable<int> CoifEsthe { get; set; }
    public Nullable<int> IdPrestationCategorie { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<PartenairePrestation> PartenairePrestations { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<PrixDureeOption> PrixDureeOptions { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<LigneReservation> LigneReservations { get; set; }
    public virtual PrestationCategorie PrestationCategorie { get; set; }
}
}

Спасибо всем, кто найдет время, чтобы помочь мне:)

1 Ответ

0 голосов
/ 26 февраля 2019

Вы можете использовать JsonIgnoreAttribute и DataMemberAttribute

По умолчанию библиотека Json будет включать все открытые свойства классов и поля в создаваемом им JSON.Добавление JsonIgnoreAttribute к свойству указывает сериализатору всегда пропускать запись его в результат JSON.

[JsonIgnore]
public int Categorie { get; set; }

Если вы хотите сериализовать только небольшое подмножество свойств класса, тогда лучший способ решить этот сценарий - этодобавьте DataContractAttribute к классу и DataMemberAttributes к свойствам для сериализации.Это не обязательная сериализация, только те свойства, которые вы помечаете, должны быть сериализованы, по сравнению с сериализацией отказа с использованием JsonIgnoreAttribute.

[DataContract]
public class Prestation
{  
  // included in JSON
  [DataMember]
  public int IdPrestation { get; set; }
  [DataMember]
  public string NomPrestation { get; set; }

  //ignored in JSON
  public int Categorie { get; set; }
  public Nullable<int> CoifEsthe { get; set; }
  public Nullable<int> IdPrestationCategorie { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...