[英]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.