簡體   English   中英

序列化 Json 添加 "InitializeTask":null 元素

[英]Serializing Json adds "InitializeTask":null element

更新:這是由 MvxViewModel 引起的。 更改為 MvxNotifyPropertyChanged 解決了它(因為它實際上是我想要的)!

當我將 Json 序列化為我的 CategoriesJson 類型時,它會添加一個 "InitializeTask":null 元素。 所以,我的 CategoriesJson 代碼:

public class CategoriesJson
{
    public CategoriesJson()
    {
        Categories = new List<CategoryViewModel>();
    }
    public List<CategoryViewModel> Categories { get; set; }
}

CategoryViewModel 在這里:

public class CategoryViewModel : MvxViewModel
        , IHandle<CategorySelectedEvent>
        , IHandle<MainMonthChangedEvent>
    {
        private IEventAggregator events;
        private IConfigurationReader configurationReader;

        public CategoryViewModel()
        {
            Transfers = new List<Transfer>();
        }

        private MvxCommand addTransferClicked;
        [JsonIgnore]
        public IMvxCommand AddTransferClicked => addTransferClicked;

        public Guid Id { get; set; }
        public string Name { get; set; }
        public List<Transfer> Transfers { get; set; }
        [JsonIgnore]
        public string TotalAmount => $"{GetTotalAmount()}";

        private Guid selectedMainMonthId;

        [JsonIgnore]
        public Guid SelectedMainMonthId
        {
            get => selectedMainMonthId;
            set
            {
                if (SetProperty(ref selectedMainMonthId, value))
                {
                    Transfers = configurationReader.ReadTransfers(Id, value);
                    RaisePropertyChanged(nameof(TotalAmount));
                }

            }
        }

        [JsonIgnore]
        private string transferAmount;
        [JsonIgnore]
        public string TransferAmount
        {
            get => transferAmount;
            set => SetProperty(ref transferAmount, value);
        }

        [JsonIgnore]
        private bool isExpanded;
        [JsonIgnore]
        public bool IsExpanded
        {
            get { return isExpanded; }
            set => SetProperty(ref isExpanded, value);
        }

        //public List<MonthViewModel> Months => configurationReader.ReadMonths();
        [JsonIgnore]
        private MonthViewModel selectedMonth;

        [JsonIgnore]
        public MonthViewModel SelectedMonth
        {
            get { return selectedMonth; }
            set => SetProperty(ref selectedMonth, value);
        }

        public string GetTotalAmount()
        {
            double amount = 0;
            foreach (var transfer in Transfers)
            {
                amount += transfer.Amount;
            }

            return $"£ {amount}";
        }

        public void Handle(CategorySelectedEvent message)
        {
            if (Id != message.Id)
                return;

            IsExpanded = true;
        }

        private void AddTransfer()
        {
            var parsed = Double.TryParse(TransferAmount, out double amountResult);
            if (!parsed)
                return;

            configurationReader.AddTransfer(Id, amountResult, SelectedMonth.Id, DateTime.Now, "notes here");
            TransferAmount = String.Empty;
            IsExpanded = false;
        }

        public void Handle(MainMonthChangedEvent message)
        {
            SelectedMainMonthId = message.Id;
        }

        public override void ViewAppearing()
        {
            events = Mvx.Resolve<IEventAggregator>();

            events.Subscribe(this);
            configurationReader = Mvx.Resolve<IConfigurationReader>();
            Transfers = new List<Transfer>();
            addTransferClicked = new MvxCommand(AddTransfer);
            base.ViewAppearing();
        }

我將 JsonIgnore 標記放在我不想序列化的所有屬性和字段中 - 這沒有幫助。 所以,當我序列化 Json 時,我得到,例如:

{"Categories":[{"Id":"2d48427c-c170-4932-96e9-7668418ba008","Name":"test","Transfers":[],"InitializeTask":null}]}

我不明白 InitializeTask 是從哪里來的..之前沒有,但是在我添加了更多代碼之后,它開始出現,我無法追溯到我的代碼的早期版本以查看是什么導致了它。

先感謝您!

可能MvxViewModel基類具有該屬性並導致問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM