为此,您可以使用自定义JsonConverter
。请参阅下面的基本版本为您的目的。
public class PersonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
if (objectType == typeof(Employee))
return true;
return false;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return "";
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
JToken t = JToken.FromObject(value);
if (t.Type != JTokenType.Object)
{
t.WriteTo(writer);
}
else
{
JObject o = (JObject)t;
o.Remove("Name"); //currently the property name is hardcoded. You could enhance this to remove any property you like
o.WriteTo(writer);
}
}
}
创建JsonConverter
您可以使用像下面反序列化过程后,
var des = JsonConvert.SerializeObject(e, new PersonConverter());
//e is the Person instance we want to convert and PersonConverter is the custom converter
//we use of serialization
请参阅本link查找有关此
您是否总是希望'Name'在您序列化子类型的Person时被忽略?如果是这样,只是一个简单的忽略属性应该做的伎俩。 – mason
这只是我给出的一个例子。但我真正的基类有多个属性和深入的对象图。所以只是不想序列化任何基类属性。 – Saran
按照梅森建议,使用JsonIgnore属性标记基类中的属性。这应该够了吧。 – EventHorizon