最も簡単な方法は、JsonIgnore
属性を使用することです。
Terms
次のようなオブジェクトを作成すると:
Terms terms = new Terms() { SecretTerm = "Secret", Term = "Not secret" };
そして、SecretTerm
次のように見える場合:
[JsonIgnore]
[JsonProperty("SecretTerm")]
public string SecretTerm { get; set; }
シリアル化された Json は次のようになります。
{
"Term": "Not secret"
}
よりきめ細かい制御が必要な場合は、カスタム コンバーターを作成する必要があります。
編集:
オブジェクトをより選択的に出力するには、カスタム コンバーターが必要です。
class TermsConverter : Newtonsoft.Json.JsonConverter
{
public override bool CanConvert(Type objectType)
{
return typeof(Terms) == objectType;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
Terms terms = (Terms)value;
writer.WriteStartObject();
writer.WritePropertyName("Term");
writer.WriteValue(terms.Term);
writer.WriteEndObject();
}
}
シリアル化するときは、次のようにします。
var jsonRequest = JsonConvert.SerializeObject(this, new TermsConverter());
コンバーターを使用せずにオブジェクトを簡単に逆シリアル化できるため、ReadJson
未実装のままにしておく必要はないと思います。Terms
この場合、SecretTerm
プロパティは単に空になります。
[JsonIgnore]
コンバーターを使用すると、プロパティの属性は必要ありませんSecretTerm
。