using System.Runtime.CompilerServices;
using Newtonsoft.Json.Serialization;
public static void Main()
var settings = new JsonSerializerSettings
ContractResolver = new CustomResolver(),
Formatting = Formatting.Indented
string json = JsonConvert.SerializeObject(new Foo(), settings);
[JsonObject(MemberSerialization.Fields)]
private string privateField;
public string publicField;
internal string internalField;
public string PublicProperty { get; set; }
private string PrivateProperty { get; set; }
public string GetOnlyProperty { get { return "blah"; } }
class CustomResolver : DefaultContractResolver
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
JsonProperty prop = base.CreateProperty(member, memberSerialization);
JsonObjectAttribute attr = prop.DeclaringType.GetCustomAttribute<JsonObjectAttribute>();
if (attr != null && attr.MemberSerialization == MemberSerialization.Fields &&
member.GetCustomAttribute<CompilerGeneratedAttribute>() != null)