Desculpe, decidi escrever outra resposta, já que nenhuma das outras respostas é passível de cópia.
Se você não deseja decorar propriedades com alguns atributos, ou se não tem acesso à classe, ou se deseja decidir o que serializar durante o tempo de execução, etc. etc., veja como fazê-lo no Newtonsoft.
//short helper class to ignore some properties from serialization
public class IgnorePropertiesResolver : DefaultContractResolver
{
private IEnumerable<string> _propsToIgnore;
public IgnorePropertiesResolver(IEnumerable<string> propNamesToIgnore)
{
_propsToIgnore = propNamesToIgnore;
}
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
property.ShouldSerialize = (x) => { return !_propsToIgnore.Contains(property.PropertyName); };
return property;
}
}
Uso
JsonConvert.SerializeObject(YourObject, new JsonSerializerSettings()
{ ContractResolver = new IgnorePropertiesResolver(new[] { "Prop1", "Prop2" }) };);
Publiquei o código aqui, caso alguém queira adicionar algo
https://github.com/jitbit/JsonIgnoreProps
ATUALIZAÇÃO IMPORTANTE: certifique-se de armazenar em cache o ContractResolver
objeto se você decidir usar esta resposta, caso contrário, o desempenho poderá sofrer.