到目前为止,最简单的方法是使用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
属性。