Вы можете сделать это, используя пользовательский конвертер , но в зависимости от сложности ваших объектов, это может стать довольно сложным.Например, тот, который может обрабатывать любой объект со значениями string и int, а также IEnumerables, будет выглядеть примерно так:
public class CaseConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return true;
}
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)
{
if (value.GetType() == typeof(string) || value.GetType() == typeof(int))
{
writer.WriteValue(value.ToString().ToLower());
}
else
{
var enumerable = value as System.Collections.IEnumerable;
if (enumerable != null)
{
writer.WriteStartArray();
foreach (var item in enumerable)
{
serializer.Serialize(writer, item);
}
writer.WriteEndArray();
}
else
{
writer.WriteStartObject();
PropertyInfo[] properties = value.GetType().GetProperties();
foreach (PropertyInfo pi in properties)
{
writer.WritePropertyName(pi.Name.ToLower());
serializer.Serialize(writer, pi.GetValue(value));
}
writer.WriteEndObject();
}
}
}
Если вы знаете, какой тип объекта вы сериализуете, вы можете написатьваш конвертер должен быть определенным для этого типа вместо использования отражения.
При вызове пользовательского конвертера вы просто добавляете его в настройки сериализатора.
var client = new DocumentClient(new Uri(""), "", serializerSettings: new JsonSerializerSettings
{
Converters = new List<JsonConverter>
{
new CaseConverter()
}
});