I'm using json.net (Newtonsoft's JsonSerializer). I need to customize serialization in order to meet following requirements:
- property names must start with lower case letter.
 - Dictionary<string, T> must be serialized into jsonp where keys will be used for property names. LowerCase rule does not apply for dictionary keys.
 
for example:
var product = new Product();
procuct.Name = "Product1";
product.Items = new Dictionary<string, Item>();
product.Items.Add("Item1", new Item { Description="Lorem Ipsum" });
must serialize into:
{
  name: "Product1",
  items : {
    "Item1": {
       description : "Lorem Ipsum"
    }
  }
}
notice that property Name serializes into "name", but key Item1 serializes into "Item1";
I have tried to create CustomJsonWriter to serialize property names, but it changes also dicionary keys.
public class CustomJsonWriter : JsonTextWriter
{
    public CustomJsonWriter(TextWriter writer) : base(writer)
    {
        
    }
    public override void WritePropertyName(string name, bool escape)
    {
        if (name != "$type")
        {
            name = name.ToCamelCase();
        }
        base.WritePropertyName(name, escape);
    }
}
EDIT: the best answer is using Naming Strategy as @alelom suggested in comments:
new CamelCaseNamingStrategy
{
    ProcessDictionaryKeys = false
}