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

时间:2018-03-04 15:08:47

标签: c# json

更新: 它是由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来自哪里..它之前没有,但是在我添加了一些代码之后,它开始出现,我无法追溯到我的代码的早期版本看到是什么造成的。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

可能MvxViewModel基类具有该属性并导致问题。