Свойство ASPNET Core ActionResult не сериализуется - PullRequest
0 голосов
/ 11 октября 2019

У меня есть этот объект

[DataContract]
public class FilterList<T> : List<T>
{
    [DataMember]
    public int Total { get; set; }
}

В моем контроллере:

public ActionResult<FilterList<MyPOCO>> GetFilteredResult(string filter)
{
    var l = new FilterList<MyPOCO>();
    l.Total = 123456;
    // Continue to add many MyPOCO objects into the list
    return l;
}

Я могу получить список MyPOCO на стороне клиента, но l.Total НЕ сериализуется. Могу ли я знать, что я сделал неправильно?

1 Ответ

0 голосов
/ 11 октября 2019

Вот обходной путь, вы можете попробовать использовать атрибут [JsonObject]. Но элементы не будут сериализованы , потому что контейнер JSON может иметь свойства или элементы, но не оба вместе. Если вы хотите и то и другое, вам нужно добавить синтетическое свойство списка для хранения элементов.

[JsonObject] также приведет к сериализации свойств базового класса, таких как Capacity, что, скорее всего, вам не нужно. Чтобы подавить свойства базового класса, используйте MemberSerialization.OptIn . Таким образом, ваш последний класс должен выглядеть примерно так:

[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public class FilterList<T> : List<T>
{
    [JsonProperty]
    public int Total { get; set; }

    [JsonProperty]
    List<T> Items
    {
        get
        {
            return this.ToList();
        }
        set
        {
            if (value != null)
                this.AddRange(value);
        }
    }
}

Результат:

enter image description here

...