我有課
public class SettingsExpires : ViewModelBase
{
private int? frequency;
[JsonProperty("frequency")]
public int? Frequency
{
get => frequency;
set => this.Set(ref frequency, value);
}
}
ViewModelBaseGalaSoft.MvvmLight的類在哪里abstract當我嘗試將我的類序列化為 json 并得到這個時,我的問題就開始了:
{{ "frequency": null, "IsInDesignMode": false}}
我IsInDesignMode從基礎課上得到ViewModelBase
public bool IsInDesignMode { get; }
如何從基類中忽略此屬性?我試過這樣的事情:
public class SettingsExpires : ViewModelBase
{
private int? frequency;
[JsonProperty("frequency")]
public int? Frequency
{
get => frequency;
set => this.Set(ref frequency, value);
}
[JsonIgnore]
public new bool IsInDesignMode { get; }
}
或這個:
public class SettingsExpires : ViewModelBase
{
private int? frequency;
[JsonProperty("frequency")]
public int? Frequency
{
get => frequency;
set => this.Set(ref frequency, value);
}
[JsonIgnore]
public bool IsInDesignMode { get; }
}
但它不起作用
uj5u.com熱心網友回復:
您可以定義一個自定義合同決議器來忽略這些屬性。例如,
public class ShouldSerializeContractResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var property = base.CreateProperty(member, memberSerialization);
if (property.DeclaringType == typeof(ViewModelBase) && property.PropertyName == "IsInDesignMode")
{
property.ShouldSerialize = x=> false;
}
return property;
}
}
現在您可以通過指定合約決議器來序列化您的資料。
var result = JsonConvert.SerializeObject(
data,
Formatting.Indented,
new JsonSerializerSettings { ContractResolver = new ShouldSerializeContractResolver() }
);
uj5u.com熱心網友回復:
SettingsExpires通過使用以下屬性裝飾您的派生類 ( ):
[JsonObject(MemberSerialization.OptIn)]
您基本上是在指示序列化程式僅包含那些顯式注釋的屬性JsonProperty。其他所有內容都將被忽略。
參考
uj5u.com熱心網友回復:
Anu Viswan 給了(恕我直言)一個非常好的解決方案。
或者,您可以使用類頂部的屬性 [JsonObject(MemberSerialization.OptIn)] 進行序列化,這將使您能夠清楚地選擇要序列化的欄位。
但它有一個缺點:您必須將 [JsonProperty] 放在 JSON 中您想要的每個屬性上。在某些情況下非常少,但如果您有很多要序列化的類,這可能會很乏味。
您可以選擇最適合您的解決方案:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/415672.html
標籤:
