Good evening. Is it possible in any way, depending on the flag that came to the request header, to tell the serializer to use / or not use the JsonProperty attribute written on the model? For example: there is a variable flag(true, false) that we get from the request.

 [JsonProperty("FirstName")] public Name { get;set; } 

If flag = true in response we see FirstName , otherwise in response we see a field named Name .

    1 answer 1

    Yes, perhaps, here is an example with EN SO . You'll have to write your ContactResolver inherited from DefaultContractResolver and use it in JsonSerializerSettings for JsonConvert.

     class LongNameContractResolver : DefaultContractResolver { protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) { //базовый метод (тут в любом случае будет использован аттрибут JsonProperty) IList<JsonProperty> list = base.CreateProperties(type, memberSerialization); foreach (JsonProperty prop in list) { //Берем оригинальное имя поля prop.PropertyName = prop.UnderlyingName; } return list; } } 

     ... JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Formatting = Formatting.Indented; if (useLongNames) { settings.ContractResolver = new LongNameContractResolver(); } return JsonConvert.SerializeObject(obj, settings); 
    • Thank you, your answer helped with solving the problem. - Andrey Potemkin