Вы можете создать собственный распознаватель контракта, который позволит вам вносить изменения в свойства и настраивать их на игнорирование места установки XmlIgnoreAttribute.
public class CustomContractResolver : DefaultContractResolver
{
private readonly JsonMediaTypeFormatter formatter;
public CustomContractResolver(JsonMediaTypeFormatter formatter)
{
this.formatter = formatter;
}
public JsonMediaTypeFormatter Formatter
{
[DebuggerStepThrough]
get { return this.formatter; }
}
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
this.ConfigureProperty(member, property);
return property;
}
private void ConfigureProperty(MemberInfo member, JsonProperty property)
{
if (Attribute.IsDefined(member, typeof(XmlIgnoreAttribute), true))
{
property.Ignored = true;
}
}
}
Вы можете использовать этот настраиваемый распознаватель, установивContractResolver свойство JsonSerializerSettings при сериализации объекта
https://www.newtonsoft.com/json/help/html/ContractResolver.htm
string json =
JsonConvert.SerializeObject(
product, // this is your object that has xml attributes on it that you want ignored
Formatting.Indented,
new JsonSerializerSettings { ContractResolver = new CustomResolver() }
);
Если вы используете WebApi, вы можете установить его глобально для применения ко всем контрактам.
var config = GlobalConfiguration.Configuration;
var jsonSettings = config.Formatters.JsonFormatter.SerializerSettings;
jsonSettings.ContractResolver = new CustomContractResolver();